如何在测试时设置Spring日志记录级别?

时间:2017-05-29 07:51:28

标签: java spring maven logging logback

我的Spring Boot测试堆栈是Maven + Surefire + JUnit4。我用@RunWith(SpringJUnit4ClassRunner.class)注释了测试。

我的项目根目录中有application.properties这行:

logging.level.root=INFO

这可以控制运行Spring启动应用程序时的日志记录,并且可以正常运行。

但是,每当我运行任何JUnit4测试时,我都被这样的DEBUG输出页面发送垃圾邮件:

....
17:43:20.500 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'autoConfigurationReport'
17:43:20.500 [main] DEBUG org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader - Registered bean definition for imported class 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration'
17:43:20.501 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.boot.autoconfigure.condition.BeanTypeRegistry'
17:43:20.502 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'autoConfigurationReport'
....

所有这些垃圾邮件几乎不可能看到实际相关的部分。如何应用日志记录级别来测试输出?

我没有明确设置任何日志记录,并且根据文档默认使用Logback。

1 个答案:

答案 0 :(得分:11)

从一般情况来看,您可以在测试资源级别提供单独的logback-test.xml - 文件。在此文件中,您可以添加有关针对您想要的输出的日志级别的设置,例如:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
    </layout>
  </appender>

  <logger name="com.your.package" level="DEBUG">
    <appender-ref ref="CONSOLE"/>
  </logger>

  <logger name="org.springframework" level="WARN">
    <appender-ref ref="CONSOLE"/>
  </logger>

  <logger name="org.hibernate" level="WARN">
    <appender-ref ref="CONSOLE"/>
  </logger>

  <logger name="org.eclipse" level="WARN">
    <appender-ref ref="CONSOLE"/>
  </logger>

  <logger name="jndi" level="WARN">
    <appender-ref ref="CONSOLE"/>
  </logger>

  <logger name="org.apache.http.wire" level="WARN">
      <appender-ref ref="CONSOLE"/>
  </logger>

  <root level="DEBUG">
      <appender-ref ref="CONSOLE"/>
  </root>

</configuration>

希望这有助于您减少日志输出的路径。更多内容记录在logback自己的页面中:

https://logback.qos.ch/manual/configuration.html

在顶部提到:

  

让我们首先讨论尝试配置自身后面的logback的初始化步骤:   1.Logback尝试在类路径中找到一个名为logback-test.xml的文件。

     

2.如果没有找到这样的文件,logback会尝试在类路径中找到一个名为logback.groovy的文件。

     

3.如果找不到这样的文件,它会检查类路径中的文件logback.xml。

     

4.如果没有找到这样的文件,则通过查找文件META-INF,使用服务提供者加载工具(在JDK 1.6中引入)来解析com.qos.logback.classic.spi.Configurator接口的实现。类路径中的\ services \ ch.qos.logback.classic.spi.Configurator。其内容应指定所需Configurator实现的完全限定类名。

     

5.如果以上都不成功,则logback会自动使用BasicConfigurator自行配置,这将导致日志记录输出定向到控制台。