2017-05-29 114 views
4

我的Spring Boot测试堆栈是Maven + Surefire + JUnit4。我用@RunWith(SpringJUnit4ClassRunner.class)注释了测试。如何在测试时设置Spring日志级别?

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

logging.level.root=INFO 

此运行春季启动应用程序时控制记录和它工作正常运行。

但是,每当我运行任何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。

+0

你在'/ test/resources'中有'application.properties'吗?用'-Dspring.foo.bar = baz'执行测试时,您也可以传递任意属性。 – jonrsharpe

+0

@jonrsharpe我只是试图复制我的application.properties那里,但它没有改变任何东西。 –

回答

4

单元测试从一般的角度来看,你可以提供的测试资源水平一个单独logback-test.xml -file。在这个文件中,您可以添加关于针对输出的日志级别设置你想如:

<?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.如果没有这样的文件被发现,服务提供商装载设施(在JDK 1.6引入)通过在类路径中查找文件META-INF \ services \ ch.qos.logback.classic.spi.Configurator来解析com.qos.logback.classic.spi.Configurator接口的实现。其内容应指定所需配置器实现的完全限定类名称。

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

+0

这有助于很多。现在我只有一页Logback输出关于设置记录器级别的垃圾邮件。看起来在Logback设置之前还有其他的记录器被使用。 –

+0

没有appender的定义和参考,它实际上完美的作品!通过在这里试用Michael Hegner的答案发现了这一点:https://stackoverflow.com/a/35254610/2445864 –

+0

不错!在我们的一个应用程序中删除了我的引用,它似乎删除了所有的无意义的无意义输出。谢谢! :) – vegaasen

1

尝试设置日志记录配置使用通配符像这样:

logging.level.*=INFO 

此外,您还可以使用仅用于测试一个单独的属性文件。只是注释与

@TestPropertySource(locations="classpath: application.test.properties") 
相关问题