这似乎是一个疏忽错误,但我似乎无法找到原因.使用logback/slf4j进行日志记录(最新版本为slf4j-api-1.6.1,logback core/classic 0.9.24).最简单的测试日志配置是:
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!-- DONT USE THIS FORMATTER FOR LIVE LOGGING THE %L LINE NUMBER OUTPUTTER IS SLOW -->
<pattern>%le %-1r [%c{1}:%L] %m%n</pattern>
</layout>
</appender>
<root level="DEBUG">
<appender-ref ref="stdout" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
每个日志设置都以logback的内部状态行开头:
11:21:27,825 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
11:21:27,826 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:.../logback-test.xml]
11:21:28,116 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
11:21:28,124 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] …Run Code Online (Sandbox Code Playgroud) 我的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.
我想在我的项目中添加日志记录(用于控制台),在测试部分中通过spring boot添加.我有我的考试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
public class MyTest {
private final static org.slf4j.Logger LOGGER = LoggerFactory.getLogger(MyTest.class);
@Autowired
public UserDao userDao;
@Test
public void test1() {
LOGGER.info("info test");
LOGGER.debug("debug test");
}
}
Run Code Online (Sandbox Code Playgroud)
和我的测试配置:
@Configuration
@EnableJpaRepositories("example.dao")
@ComponentScan(basePackageClasses = { MyServiceImpl.class})
@EntityScan({"example.model"})
@Import({DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class TestConfig {
}
Run Code Online (Sandbox Code Playgroud)
我在test/resource中创建application.properties文件.Gradle将我的资源文件夹视为测试资源.我的application.properties:
logging.level.= INFO
logging.level.tests.= INFO
logging.level.org.hibernate= INFO
logging.level.org.springframework= INFO
logging.level.org.apache.cxf= INFO
Run Code Online (Sandbox Code Playgroud)
但是当我进行测试时,我有:
16:59:17.593 [main] INFO tests.MyTest - info test
16:59:17.594 [main] DEBUG tests.MyTest - debug test
Run Code Online (Sandbox Code Playgroud)
在控制台,为什么?我只设置'INFO'(logging.level.= INFO),为什么'DEBUG'在控制台?怎么设置好'INFO' …