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

Hub*_*iak 7 java logging spring logback maven

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

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

logging.level.root=INFO
Run Code Online (Sandbox Code Playgroud)

这可以在运行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'
....
Run Code Online (Sandbox Code Playgroud)

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

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

veg*_*sen 14

从一般的角度来看,您可以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>
Run Code Online (Sandbox Code Playgroud)

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

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

它在顶部提到:

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

2.如果未找到此类文件,则logback会尝试在类路径中查找名为logback.groovy的文件.

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

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

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