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配置规则,需要两步操作:
- 在
src/test/resources/application.properties中添加配置,关闭Quarkus默认日志接管,指定log4j2配置文件路径:
# 关闭Quarkus默认控制台、文件日志输出 quarkus.log.console.enable=false quarkus.log.file.enable=false # 指定log4j2配置文件加载路径 log4j.configurationFile=log4j2.xml
- 给Gradle测试任务添加系统参数,指定日志管理器为log4j2对应的管理器,在
build.gradle中添加如下配置:
test { systemProperty "java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager" }
内容的提问来源于stack exchange,提问作者MiketheCalamity
相关产品推荐
相关产品推荐

