如何在测试中设置Spring日志级别?

18 浏览
0 Comments

如何在测试中设置Spring日志级别?

我的Spring Boot测试堆栈是Maven + Surefire + JUnit4。我在测试中使用@RunWith(SpringJUnit4ClassRunner.class)进行注释。\n我在项目根目录下有一个application.properties文件,并包含以下行:logging.level.root=INFO。\n这个配置控制了运行Spring Boot应用程序时的日志记录,在正常运行时可以正常工作。\n然而,每当我运行任何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'
....

\n所有这些无用的输出几乎不可能看到实际相关的部分。我如何将日志级别应用于测试输出?\n我没有显式设置任何日志记录,并且根据文档,默认情况下使用Logback。

0
0 Comments

在进行Spring测试时,我们可能需要设置日志级别。下面是一种解决方法:在测试资源级别提供一个名为logback-test.xml的文件,在该文件中添加有关所需日志级别的设置,例如:



  
    
        %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
    
  
  
    
  
  
    
  
  
    
  
  
    
  
  
    
  
  
      
  
  
      
  

通过上述方法,我们可以减少日志输出量。更多详细信息可以参考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\ch.qos.logback.classic.spi.Configurator文件来解析com.qos.logback.classic.spi.Configurator接口的实现。该文件的内容应指定所需Configurator实现的完全限定类名。
5. 如果上述都没有成功,logback将自动使用BasicConfigurator进行配置,这会导致日志输出定向到控制台。

评论中的一些内容也有帮助:

这对我非常有帮助。现在我只会收到有关设置日志级别的一张Logback输出页面。看起来在设置Logback之前可能使用了其他日志记录器。
没有appender定义和引用时,它实际上运行得非常完美!通过尝试Michael Hegner在stackoverflow上的一个答案找到了这一点:stackoverflow.com/a/35254610/2445864
不错!在我们的一个应用程序中删除了引用,似乎删除了所有无意义的输出开销。谢谢! :)
如果你愿意,你可以相应地编辑你的答案,我会接受它。
刚刚注意到,如果省略了CONSOLE定义,该文件的存在会导致所有日志输出消失。这才是真正的答案。

0