Gradle构建运行时如何让单元测试中的Java代码输出内容到构建日志
Gradle单元测试Java日志输出配置方案
Gradle默认会拦截单元测试进程的标准输出、以及低于LIFECYCLE级别的日志,不会直接打印到构建控制台,按以下配置即可开启对应内容的展示:
1. 显示System.out/System.err打印内容
在项目的build.gradle配置文件中修改test任务配置即可:
Groovy语法版本
test { testLogging { // 开启标准输出、错误流的打印 showStandardStreams = true } }
Kotlin DSL(build.gradle.kts)版本
tasks.test { testLogging { showStandardStreams = true } }
配置生效后,单元测试中所有System.out.println、System.err.println的内容都会直接输出到Gradle控制台。
2. 显示SLF4J等日志框架的debug/info级别日志
如果需要打印日志框架输出的内容,除了上面的配置外,还需要额外调整日志级别配置:
固定配置到项目中
在test任务中补充以下配置:
Groovy语法版本
test { testLogging { showStandardStreams = true // 调整日志输出粒度,0为最细 minGranularity = 0 // 配置需要输出的事件类型,包含标准流、测试结果事件 events "PASSED", "SKIPPED", "FAILED", "STANDARD_OUT", "STANDARD_ERROR" } // 如果使用slf4j-simple作为日志实现,可通过系统参数指定默认日志级别 systemProperty "org.slf4j.simpleLogger.defaultLogLevel", "debug" }
Kotlin DSL版本
tasks.test { testLogging { showStandardStreams = true minGranularity = 0 events("PASSED", "SKIPPED", "FAILED", "STANDARD_OUT", "STANDARD_ERROR") } systemProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug") }
临时查看无需修改配置
如果只是单次执行测试需要查看日志,直接在gradle命令后加参数即可:
- 执行
./gradlew test -i开启INFO级别输出,可展示info及以上级别的日志 - 执行
./gradlew test -d开启DEBUG级别输出,可展示所有级别的日志,输出内容更全面但日志量较大
注意事项
- 如果项目中存在单独的测试日志配置文件(如logback-test.xml、log4j2-test.xml),需要确保配置文件中对应包的日志级别设置为debug/info,否则日志依然会被日志框架本身拦截不输出。
- 所有测试相关的输出都会默认保存在项目
build/reports/tests/test目录下的测试报告中,即使控制台没有开启输出,也可以直接打开报告查看对应测试用例的打印内容。
内容的提问来源于stack exchange,提问作者ergonaut
相关产品推荐
相关产品推荐

