Spring Boot 测试时的日志级别

发表于:2019-6-10 10:49

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Leesen译    来源:掘金

#
Spring
#
Boot
  1.概览
  该教程中,我将向你展示:如何在测试时设置spring boot 日志级别。虽然我们可以在测试通过时忽略日志,但是如果需要诊断失败的测试,选择正确的日志级别是非常重要的。
  2.日志级别的重要性
  正确设置日志级别可以节省我们许多时间。
  举例来说,如果测试在CI服务器上失败,但在开发服务器上时却通过了。我们将无法诊断失败的测试,除非有足够的日志输出。
  为了获取正确数量的详细信息,我们可以微调应用程序的日志级别,如果发现某个java包对我们的测试更加重要,可以给它一个更低的日志级别,比如DEBUG。类似地,为了避免日志中有太多干扰,我们可以为那些不太重要的包配置更高级别的日志级别,例如INFO或者ERROR。
  一起来探索设置日志级别的各种方法吧!
  3. application.properties中的日志设置
  如果想要修改测试中的日志级别,我们可以在src/test/resources/application.properties设置属性:
 logging.level.com.baeldung.testloglevel=DEBUG
  该属性将会为指定的包com.baeldung.testloglevel设置日志级别。
  同样地,我们可以通过设置root日志等级,更改所有包的日志级别
 logging.level.root=INFO
  现在通过添加REST端点写入日志,来尝试下日志设置。
   @RestController
  public class TestLogLevelController {
  private static final Logger LOG = LoggerFactory.getLogger(TestLogLevelController.class);
  @Autowired
  private OtherComponent otherComponent;
  @GetMapping("/testLogLevel")
  public String testLogLevel() {
  LOG.trace("This is a TRACE log");
  LOG.debug("This is a DEBUG log");
  LOG.info("This is an INFO log");
  LOG.error("This is an ERROR log");
  otherComponent.processData();
  return "Added some log output to console...";
  }
  }
  复制代码正如所料,如果我们在测试中调用这个端点,我们将可以看到来自TestLogLevelController的调试日志。
   2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
  2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
  2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package
   这样设置日志级别十分简单,如果测试用@SpringBootTest注解,那么我们肯定应该这样做。但是,如果不使用该注解,则必须以另一种方式配置日志级别。
  3.1 基于Profile的日志设置
  尽管将配置放在src\test\application.properties在大多数场景下好用,但在某些情况下,我们可能希望为一个或一组测试设置不同的配置。
  在这种情况下,我们可以使用@ActiveProfiles注解向测试添加一个Spring Profile:
   @RunWith(SpringRunner.class)
  @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = TestLogLevelApplication.class)
  @EnableAutoConfiguration(exclude = SecurityAutoConfiguration.class)
  @ActiveProfiles("logging-test")
  public class TestLogLevelWithProfileIntegrationTest {
  // ...
  }
  日志设置将会存在src/test/resources目录下的application-logging-test.properties中:
   logging.level.com.baeldung.testloglevel=TRACE
  logging.level.root=ERROR
  如果使用描述的设置调用TestLogLevelCcontroller,将看到controller中打印的TRACE级别日志,并且不会看到其他包出现INFO级别以上的日志。
  2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
  2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package
  4.配置Logback
  如果使用Spring Boot默认的Logback,可以在src/test/resources目录下的logback-text.xml文件中设置日志级别:
   <configuration>
  <include resource="/org/springframework/boot/logging/logback/base.xml"/>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
  <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
  </pattern>
  </encoder>
  </appender>
  <root level="error">
  <appender-ref ref="STDOUT"/>
  </root>
  <logger name="com.baeldung.testloglevel" level="debug"/>
  </configuration>
  以上例子如何在测试中为Logback配置日志级别。
  root日志级别设置为INFO,com.baeldung.testloglevel包的日志级别设置为DEBUG。
  再来一次,看看提交以上配置后的日志输出情况
  2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController    : This is a DEBUG log
  2019-04-01 14:08:27.545    INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController    : This is an INFO log
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController    : This is an ERROR log
  2019-04-01 14:08:27.546    INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent    : This is an INFO log from another package
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent    : This is an ERROR log from another package
  4.1 基于Profile配置Logback
  另一种配置指定Profile文件的方式就是在application.properties文件中设置logging.config属性:
 logging.config=classpath:logback-testloglevel.xml
   或者,如果想在classpath只有一个的Logback配置,可以在logbacl.xml使用springProfile属性。
   <configuration>
  <include resource="/org/springframework/boot/logging/logback/base.xml"/>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
  <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
  </pattern>
  </encoder>
  </appender>
  <root level="error">
  <appender-ref ref="STDOUT"/>
  </root>
  <springProfile name="logback-test1">
  <logger name="com.baeldung.testloglevel" level="info"/>
  </springProfile>
  <springProfile name="logback-test2">
  <logger name="com.baeldung.testloglevel" level="trace"/>
  </springProfile>
  </configuration>
  现在使用logback-test1配置文件调用TestLogLevelController,将会获得如下输出:
  2019-04-01 14:08:27.545    INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController    : This is an INFO log
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController    : This is an ERROR log
  2019-04-01 14:08:27.546    INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent    : This is an INFO log from another package
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent    : This is an ERROR log from another package
   另一方面,如果更改配置为logback-test2,输出将变成如下:
   2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController    : This is a DEBUG log
  2019-04-01 14:08:27.545    INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController    : This is an INFO log
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController    : This is an ERROR log
  2019-04-01 14:08:27.546    INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent    : This is an INFO log from another package
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent    : This is an ERROR log from another package
 5.可选的Log4J
  另外,如果我们使用Log4J2,我们可以在src\main\resources目录下的log4j2-spring.xml文件中配置日志等级。
   <Configuration>
  <Appenders>
  <Console name="Console" target="SYSTEM_OUT">
  <PatternLayout
  pattern="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
  </Console>
  </Appenders>
  <Loggers>
  <Logger name="com.baeldung.testloglevel" level="debug" />
  <Root level="info">
  <AppenderRef ref="Console" />
  </Root>
  </Loggers>
  </Configuration>
  我们可以通过application.properties中的logging.config属性来设置Log4J 配置的路径。
 logging.config=classpath:log4j-testloglevel.xml
  最后,查看使用以上配置后的输出:
   2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController    : This is a DEBUG log
  2019-04-01 14:08:27.545    INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController    : This is an INFO log
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController    : This is an ERROR log
  2019-04-01 14:08:27.546    INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent    : This is an INFO log from another package
  2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent    : This is an ERROR log from another package
  6.结论
  在本文中,我们学习了如何在Spring Boot测试应用程序时设置日志级别,并探索了许多不同的配置方法。在Spring Boot应用程序中使用application.properties设置日志级别是最简便的,尤其是当我们使用@SpringBootTest注解时。
  与往常一样,这些示例的源代码都在GitHub上。

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号