当前位置: 移动技术网 > IT编程>开发语言>Java > 如何设置Spring Boot测试时的日志级别

如何设置Spring Boot测试时的日志级别

2019年07月19日  | 移动技术网IT编程  | 我要评论

北方影院对手,炎帝的故事,宝鸡今日播报

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上。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网