Gradle构建Spring Boot测试时输出上下文关闭日志的问题求助
我之前也碰到过这个情况,Gradle 4.x(4.0到4.6版本)在执行Spring Boot测试任务时,确实会把Spring上下文关闭的INFO级日志输出到控制台,而我们通常只关心WARN和ERROR级别的信息。下面给你梳理下根本解决的思路和方案:
问题场景回顾
执行测试后控制台会出现这类冗余日志:
:clean :compileJava :processResources NO-SOURCE :classes :jar :assemble :compileTestJava :processTestResources NO-SOURCE :testClasses :test INFO 21140 --- [ Thread-5] o.s.w.c.s.GenericWebApplicationContext : Closing org.springframework.web.context.support.GenericWebApplicationContext@14c8305c: startup date [Fri Mar 23 16:54:13 CET 2018]; root of context hierarchy :check :build
你用logback-test.xml配置特定logger级别是可行的临时方案,但我们可以从构建工具或Spring Boot配置层面彻底解决这个问题。
根本解决办法
方案1:通过Gradle测试任务配置过滤日志
直接在build.gradle中配置测试任务的日志输出规则,让Gradle只传递WARN及以上级别的日志到控制台,从构建层面管控:
test { testLogging { // 设置日志级别阈值,仅显示WARN及更高级别 minGranularity = org.gradle.api.tasks.testing.logging.TestLogEvent.WARN // 确保标准输出/错误流的日志也遵循这个规则 showStandardStreams = true // 可选:保留失败、跳过测试的事件提示 events 'FAILED', 'SKIPPED' exceptionFormat 'FULL' } }
这个配置的好处是不需要修改任何应用侧的日志配置,完全由Gradle管控测试阶段的日志输出,非常直接高效。
方案2:用Spring Boot测试专属配置文件
如果更习惯Spring Boot的配置方式,可以在src/test/resources下创建application-test.properties,配置测试环境的日志级别:
# 关闭Spring上下文相关的INFO日志 logging.level.org.springframework.context=WARN logging.level.org.springframework.web.context=WARN
这种方式属于应用测试环境的专属配置,不会影响生产环境,而且比单独的logback-test.xml更贴合Spring Boot的配置生态,也是一种彻底的解决办法。
验证效果
配置完成后,执行./gradlew test,你会发现控制台不再输出那些Spring上下文关闭的INFO日志,只保留WARN和ERROR级别的信息,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Igor Akkerman

