You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus 2.7+版本JUnit测试无法读取test/resources下log4j2.xml配置

Quarkus2.7+版本JUnit测试debug日志不生效问题解决

问题现象

在src/test/resources路径下配置log4j2.xml文件,用于JUnit测试运行时开启debug级别日志,保障所有代码路径都能被执行覆盖。Quarkus升级到2.7及以上版本(2.8、2.9版本均验证存在该问题)后,测试运行时debug日志不再生效,jacoco任务统计显示代码行覆盖率未达标。

复现步骤

  • 执行命令./gradlew service1:build
  • 执行命令./gradlew service1:jacocoTestCoverageVerification,低版本Quarkus下执行成功
  • 将gradle.properties文件中的Quarkus版本修改为2.7或更高版本
  • 重复执行前两步命令,此时会因代码覆盖率不达标导致执行失败

原因说明

Quarkus从2.7版本开始调整了测试运行时的类加载逻辑与日志初始化优先级:

  • 测试阶段默认优先加载Quarkus原生日志配置,不会自动扫描classpath根路径下的第三方日志配置文件(包括log4j2.xml)
  • 默认启用的JBoss LogManager会接管日志输出,自定义log4j2配置默认不生效

解决方案

可根据自身需求选择以下任意一种配置方式:

方案1:使用Quarkus原生日志配置(推荐)

无需保留自定义log4j2.xml,直接在src/test/resources/application.properties中添加日志级别配置即可生效:

# 全局日志级别设置为DEBUG
quarkus.log.level=DEBUG
# 如需指定特定包路径的日志级别,可单独配置,示例:
# quarkus.log.category."com.example.service".level=DEBUG

方案2:沿用自定义log4j2.xml配置

如果需要保留原有log4j2配置规则,需要两步操作:

  1. 在src/test/resources/application.properties中添加配置,关闭Quarkus默认日志接管,指定log4j2配置文件路径:
# 关闭Quarkus默认控制台、文件日志输出
quarkus.log.console.enable=false
quarkus.log.file.enable=false
# 指定log4j2配置文件加载路径
log4j.configurationFile=log4j2.xml
  1. 给Gradle测试任务添加系统参数,指定日志管理器为log4j2对应的管理器,在build.gradle中添加如下配置:
test {
    systemProperty "java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager"
}

内容的提问来源于stack exchange,提问作者MiketheCalamity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:33:34