运行gradlew test时如何限制指定包的日志输出?
解决方案
方案1:build.gradle侧直接过滤输出
直接在test任务的testLogging配置中添加行过滤规则,仅保留包含目标包名的日志行:
test { testLogging { showStandardStreams = true // 仅保留含自定义测试包名的日志行 filter { line -> line.contains("org.example.test") } exceptionFormat = 'full' } }
- 优点:无需修改项目业务/测试配置,仅调整构建脚本即可生效
- 缺点:仅能过滤单行日志,多行的异常栈、换行日志会丢失未匹配的行
方案2:调整测试环境日志框架配置(更稳定,推荐)
Spring Boot项目默认使用Logback作为日志实现,你可以在src/test/resources目录下新增logback-test.xml配置文件,仅开启目标包的INFO级别日志输出,第三方包的日志统一调高输出级别避免无关内容:
<configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </encoder> </appender> <!-- 自定义测试包输出INFO及以上级别日志 --> <logger name="org.example.test" level="INFO" additivity="false"> <appender-ref ref="CONSOLE" /> </logger> <!-- 第三方框架日志仅输出WARN及以上级别,屏蔽INFO级别的无关日志 --> <logger name="org.springframework" level="WARN" /> <logger name="org.apache.catalina" level="WARN" /> <logger name="org.springframework.amqp" level="WARN" /> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration>
如果项目使用的是Log4j2,对应修改src/test/resources/log4j2-test.xml的包日志级别即可。
- 优点:日志输出逻辑更稳定,多行日志、异常栈都能完整保留,IDE执行测试也能生效
- 缺点:需要修改测试资源下的日志配置文件
内容的提问来源于stack exchange,提问作者NiTiN
相关产品推荐
相关产品推荐

