如何设置Spring Boot测试时的日志级别
1.概览
该教程中,我将向你展示:如何在测试时设置springboot日志级别。虽然我们可以在测试通过时忽略日志,但是如果需要诊断失败的测试,选择正确的日志级别是非常重要的。
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 publicclassTestLogLevelController{ privatestaticfinalLoggerLOG=LoggerFactory.getLogger(TestLogLevelController.class); @Autowired privateOtherComponentotherComponent; @GetMapping("/testLogLevel") publicStringtestLogLevel(){ LOG.trace("ThisisaTRACElog"); LOG.debug("ThisisaDEBUGlog"); LOG.info("ThisisanINFOlog"); LOG.error("ThisisanERRORlog"); otherComponent.processData(); return"Addedsomelogoutputtoconsole..."; } }
正如所料,如果我们在测试中调用这个端点,我们将可以看到来自TestLogLevelController的调试日志。
2019-04-0114:08:27.545DEBUG56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisaDEBUGlog 2019-04-0114:08:27.545INFO56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanINFOlog 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanERRORlog 2019-04-0114:08:27.546INFO56585---[nio-8080-exec-1]c.b.component.OtherComponent:ThisisanINFOlogfromanotherpackage 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.component.OtherComponent:ThisisanERRORlogfromanotherpackage
这样设置日志级别十分简单,如果测试用@SpringBootTest注解,那么我们肯定应该这样做。但是,如果不使用该注解,则必须以另一种方式配置日志级别。
3.1基于Profile的日志设置
尽管将配置放在src\test\application.properties在大多数场景下好用,但在某些情况下,我们可能希望为一个或一组测试设置不同的配置。
在这种情况下,我们可以使用@ActiveProfiles注解向测试添加一个SpringProfile:
@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT,classes=TestLogLevelApplication.class) @EnableAutoConfiguration(exclude=SecurityAutoConfiguration.class) @ActiveProfiles("logging-test") publicclassTestLogLevelWithProfileIntegrationTest{ //... }
日志设置将会存在src/test/resources目录下的application-logging-test.properties中:
logging.level.com.baeldung.testloglevel=TRACE logging.level.root=ERROR
如果使用描述的设置调用TestLogLevelCcontroller,将看到controller中打印的TRACE级别日志,并且不会看到其他包出现INFO级别以上的日志。
2019-04-0114:08:27.545DEBUG56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisaDEBUGlog 2019-04-0114:08:27.545INFO56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanINFOlog 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanERRORlog 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.component.OtherComponent:ThisisanERRORlogfromanotherpackage
4.配置Logback
如果使用SpringBoot默认的Logback,可以在src/test/resources目录下的logback-text.xml文件中设置日志级别:
%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n
以上例子如何在测试中为Logback配置日志级别。
root日志级别设置为INFO,com.baeldung.testloglevel包的日志级别设置为DEBUG。
再来一次,看看提交以上配置后的日志输出情况
2019-04-0114:08:27.545DEBUG56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisaDEBUGlog 2019-04-0114:08:27.545INFO56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanINFOlog 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanERRORlog 2019-04-0114:08:27.546INFO56585---[nio-8080-exec-1]c.b.component.OtherComponent:ThisisanINFOlogfromanotherpackage 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.component.OtherComponent:ThisisanERRORlogfromanotherpackage
4.1基于Profile配置Logback
另一种配置指定Profile文件的方式就是在application.properties文件中设置logging.config属性:
logging.config=classpath:logback-testloglevel.xml
或者,如果想在classpath只有一个的Logback配置,可以在logbacl.xml使用springProfile属性。
%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n
现在使用logback-test1配置文件调用TestLogLevelController,将会获得如下输出:
2019-04-0114:08:27.545INFO56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanINFOlog 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanERRORlog 2019-04-0114:08:27.546INFO56585---[nio-8080-exec-1]c.b.component.OtherComponent:ThisisanINFOlogfromanotherpackage 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.component.OtherComponent:ThisisanERRORlogfromanotherpackage
另一方面,如果更改配置为logback-test2,输出将变成如下:
2019-04-0114:08:27.545DEBUG56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisaDEBUGlog 2019-04-0114:08:27.545INFO56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanINFOlog 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanERRORlog 2019-04-0114:08:27.546INFO56585---[nio-8080-exec-1]c.b.component.OtherComponent:ThisisanINFOlogfromanotherpackage 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.component.OtherComponent:ThisisanERRORlogfromanotherpackage
5.可选的Log4J
另外,如果我们使用Log4J2,我们可以在src\main\resources目录下的log4j2-spring.xml文件中配置日志等级。
我们可以通过application.properties中的logging.config属性来设置Log4J配置的路径。
logging.config=classpath:log4j-testloglevel.xml
最后,查看使用以上配置后的输出:
2019-04-0114:08:27.545DEBUG56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisaDEBUGlog 2019-04-0114:08:27.545INFO56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanINFOlog 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.testloglevel.TestLogLevelController:ThisisanERRORlog 2019-04-0114:08:27.546INFO56585---[nio-8080-exec-1]c.b.component.OtherComponent:ThisisanINFOlogfromanotherpackage 2019-04-0114:08:27.546ERROR56585---[nio-8080-exec-1]c.b.component.OtherComponent:ThisisanERRORlogfromanotherpackage
6.结论
在本文中,我们学习了如何在SpringBoot测试应用程序时设置日志级别,并探索了许多不同的配置方法。在SpringBoot应用程序中使用application.properties设置日志级别是最简便的,尤其是当我们使用@SpringBootTest注解时。
与往常一样,这些示例的源代码都在GitHub上。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。