Spring 引导单元测试忽略 logging.level

我的一个 maven 模块在运行测试时忽略了日志记录级别。

src/test/resources我有 application.properties:

app.name=bbsng-import-backend
app.description=Import Backend Module for Application
spring.profiles.active=test


# LOGGING
logging.level.root=error
logging.level.org.springframework.core =fatal
logging.level.org.springframework.beans=fatal
logging.level.org.springframework.context=fatal
logging.level.org.springframework.transaction=error
logging.level.org.springframework.test=error
logging.level.org.springframework.web=error
logging.level.org.hibernate=ERROR

我也试了 application-test.properties

My Application logs a lot, especially when loading context. I tried logback.xml, logback-test.xml and logback-spring.xml but nothing helps.

我的球:

<parent>
<groupId>at.company.bbsng</groupId>
<artifactId>bbsng-import</artifactId>
<version>0.1.0-SNAPSHOT</version>
</parent>


<artifactId>bbsng-import-backend</artifactId>
<name>bbsng-import-backend</name>


<properties>
<start-class>at.company.bbsng.dataimport.ApplicationImportBackend</start-class>
</properties>




<dependencies>


<!-- APPLICATION ... -->
<dependency>
<groupId>at.company.bbsng</groupId>
<artifactId>bbsng-app-domain</artifactId>
<scope>test</scope>
</dependency>


<!-- SPRING ... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<scope>test</scope>
</dependency>


<!-- JAVAX ... -->
...


<!-- COMMONS ... -->
...


<!-- LOMBOK ... -->
...


<!-- DB -->
...


</dependencies>


<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${org.springframework.boot-version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

一个简单的 Test 类:

@ContextConfiguration(classes = { ApplicationImportBackend.class })
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {


@Autowired
private JobLauncher jobLauncher;


@Test
public void testSimpleProperties() throws Exception {
assertNotNull(jobLauncher);
}


}

应用程序日志处于 DEBUG 模式。

是的,application.properties将被加载。我已经尝试用错误的配置破坏应用程序。

谢谢你的提示。

46104 次浏览

试试这个:

@ContextConfiguration(classes = ApplicationImportBackend.class,
initializers = ConfigFileApplicationContextInitializer.class)
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {
//...
}

好的,我现在所做的,在所有模块中,我配置如下:

Src/main/resources:
I use logging configuration in application.properies like logging.level.* as described in the question.

src/test/resources:
我使用 logback-test.xml是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<logger name="*.myapp" level="error" />
<logger name="org.springframework.core " level="error" />
<logger name="org.springframework.beans" level="error" />
<logger name="org.springframework.context" level="error" />
<logger name="org.springframework.transaction" level="error" />
<logger name="org.springframework.web" level="error" />
<logger name="org.springframework.test" level="error" />
<logger name="org.hibernate" level="error" />
</configuration>

但是我仍然不明白,为什么在一些模块中我可以使用 application.properties,但是在另一个模块中它忽略了... ... 但是现在对我来说它就是这样工作的。

但是也许还是欢迎一些有背景知识的提示。

我不会把我的答案标记为解决方案,因为它仍然感觉像一个变通方案。

要启用 application.properties,需要为测试类添加一个注释 @SpringBootTest,请阅读更多的 here

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<logger name="org.springframework" level="INFO"/>
</configuration>

作为一个快速修复,我把 logback.xml文件与上述内容在 src/test/resources和它的工作。

我也在寻找一个解决方案,同时我使用下面的解决方案:

这不是最好的,但它的工作

@BeforeClass
public static void setErrorLogging() {
LoggingSystem.get(ClassLoader.getSystemClassLoader()).setLogLevel(Logger.ROOT_LOGGER_NAME, LogLevel.ERROR);
}

LoggingSystem: 日志系统上的一种常见抽象。

- >

get: 检测并返回正在使用的日志记录系统。支持 Logback 和 Java 日志记录

返回文章页面 设置给定日志记录器的日志记录级别。

确保更改所有其他测试类的回溯日志级别。

希望能帮到你,祝你好运

如果您的测试是用 @DataJpaTest注释的,那么您可以使用以下命令关闭 Hibernate SQL 注销:

@DataJpaTest(showSql=false)
public class MyTest {
..
}