Spring Boot Sping Boot Unit Test忽略日志记录,level

uttx8gqw  于 2023-05-17  发布在  Spring
关注(0)|答案(7)|浏览(208)

我的一个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
我的应用程序会记录很多日志,特别是在加载上下文时。我尝试了logback.xmllogback-test.xmllogback-spring.xml,但没有任何帮助。
我的pom:

<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);
    }

}

应用程序日志处于调试模式。
是的,application.properties将被加载。我已经尝试通过错误的配置来破坏应用程序。
谢谢你的任何提示。

ie3xauqp

ie3xauqp1#

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

src/main/resources:

我在application.properies中使用日志配置,如问题中所述。

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,但在另一个模块中它忽略了...但现在它对我很有效。
但也许一些背景知识的提示仍然是受欢迎的。
我不把我的答案标记为解决方案,因为它仍然感觉像一个变通方案。

pobjuy32

pobjuy322#

<?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和它的工作。

b1payxdu

b1payxdu3#

要启用application.properties,需要在测试类中添加一个注解@SpringBootTest,请在此处阅读更多内容。

kupeojn6

kupeojn64#

我也在寻找解决方案,同时我使用以下解决方案:
这不是最好的,但它的工作

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

LoggingSystem:日志系统的通用抽象。
->
get:检测并返回正在使用的日志记录系统。支持Logback和Java日志记录
setLogLevel:设置给定日志记录器的日志记录级别。
确保更改所有其他测试类的日志级别。
希望对你有帮助,祝你好运

k4ymrczo

k4ymrczo5#

如果你的测试是用@DataJpaTest注解的,你可以用以下命令关闭Hibernate SQL日志:

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

new9mtju6#

试试这个:

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

vhipe2zx7#

根据教程,您可以将***logback.xml***文件添加到*src/test/resources*目录中
如果您需要对logback应用自定义,而不是使用www.example.com可以实现的自application.properties,则需要添加标准logback配置文件。您可以将一个
logback.xml
文件添加到类路径的根目录,以便logback查找。如果你想使用Sping Boot Logback扩展,你也可以使用logback-spring.xml。
logback.xml文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include
        resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include
        resource="org/springframework/boot/logging/logback/console-appender.xml" />
    <root level="warn">
        <appender-ref ref="CONSOLE" />
    </root>
    <logger name="ua.com.company" level="warn" />
    <logger name="org.springframework.core " level="warn" />
    <logger name="org.springframework.beans" level="warn" />
    <logger name="org.springframework.context" level="warn" />
    <logger name="org.flyway" level="debag" />
    <logger name="org.springframework.transaction" level="warn" />
    <logger name="org.springframework.web" level="debug" />
    <logger name="org.springframework.test" level="warn" />
    <logger name="org.hibernate" level="warn" />
</configuration>

相关问题