知識庫 / Spring / Spring Boot RSS 訂閱

在 Spring Boot 測試中設置日誌級別

Spring Boot,Testing
HongKong
4
01:23 PM · Dec 06 ,2025

1. 概述

本教程將教您如何在運行 Spring Boot 應用程序的測試時設置日誌級別。

雖然我們可以在測試通過時忽略大部分日誌,但選擇合適的日誌級別在需要診斷失敗的測試時至關重要。

2. 日誌級別的重要性

正確配置日誌級別可以節省大量時間。

例如,如果在CI服務器上測試失敗,但在我們的開發機器上通過,我們無法診斷失敗的測試,除非我們有足夠的日誌輸出。反之,如果日誌記錄了過多的細節,可能會更難找到有用的信息。

為了達到合適的詳細程度,我們可以對應用程序的包進行精細調整,從而設置合適的日誌級別。如果發現一個Java包對我們的測試更為關鍵,我們可以將其級別設置為較低,例如 DEBUG。 同樣,為了避免日誌中出現過多的噪音,我們可以將不太重要的包配置為更高的級別,例如 INFOERROR

讓我們探索各種設置日誌級別的方法。

3. 在 application.properties 中配置日誌設置

如果要在測試中修改日誌級別,可以在 src/test/resources/application.properties 中設置一個屬性:

logging.level.com.baeldung.testloglevel=DEBUG

此屬性將設置 日誌級別,具體針對com.baeldung.testloglevel包。

同樣,我們也可以通過設置根日誌級別來更改所有包的日誌級別:

logging.level.root=INFO

現在讓我們通過添加一個寫入日誌的 REST 端點來測試我們的日誌設置:

@RestController
public class TestLogLevelController {

    private static final Logger LOG = LoggerFactory.getLogger(TestLogLevelController.class);

    @Autowired
    private OtherComponent otherComponent;

    @GetMapping("/testLogLevel")
    public String testLogLevel() {
        LOG.trace("This is a TRACE log");
        LOG.debug("This is a DEBUG log");
        LOG.info("This is an INFO log");
        LOG.error("This is an ERROR log");

        otherComponent.processData();

        return "Added some log output to console...";
    }

}

正如預期的那樣,如果在我們的測試中調用此端點我們將能夠看到來自 DEBUG 日誌。

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

這樣設置日誌級別非常簡單,如果我們的測試用例使用了 @SpringBootTest 註解,我們應該這樣設置。但是,如果我們不使用該註解,則需要以另一種方式配置日誌級別。

3.1. 基於 Profile 的日誌配置

儘管將設置放入 <em src/test/application.properties</em> 中在大多數情況下都能工作,但在某些情況下,我們可能希望為單個測試或一組測試設置不同的配置。

在這種情況下,我們可以通過使用 <em ActiveProfiles</em> 註解,為測試添加一個 Spring Profile。

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = TestLogLevelApplication.class)
@EnableAutoConfiguration(exclude = SecurityAutoConfiguration.class)
@ActiveProfiles("logging-test")
public class TestLogLevelWithProfileIntegrationTest {

    // ...

}

我們的日誌配置將位於一個特殊的 application-logging-test.properties 文件中,該文件位於 <em src/test/resources 目錄下:

logging.level.com.baeldung.testloglevel=TRACE
logging.level.root=ERROR

如果我們從測試中調用 TestLogLevelController,並使用所描述的設置,我們將會看到來自我們控制器的 TRACE 日誌,並且不會再有其他包產生的 INFO 日誌:

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

4. 配置 Logback

如果使用 Logback,該日誌框架是 Spring Boot 的默認設置,我們可以通過在 <em src/test/resources</em> 目錄下的<em logback-test.xml 文件中設置日誌級別。`

<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>
    <root level="error">
        <appender-ref ref="STDOUT"/>
    </root>
    <logger name="com.baeldung.testloglevel" level="debug"/>
</configuration>

上述示例展示瞭如何在我們的 Logback 配置中設置測試的日誌級別。根日誌級別設置為 INFO,而我們的 com.baeldung.testloglevel 包的日誌級別設置為 DEBUG

再次,讓我們檢查在應用上述設置後的輸出:

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

4.1. 基於 Profile 的 Logback 配置

另一種為我們的測試設置基於 Profile 的特定配置的方法是,在我們的 Profile 中設置 <em >logging.config</em > 屬性,位於 <em >application.properties</em > 文件中:

logging.config=classpath:logback-testloglevel.xml

或者,如果我們希望在我們的類路徑上擁有一個單一的 Logback 配置,我們可以使用 springProfile 元素在 logback.xml 中:

<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>
    <root level="error">
        <appender-ref ref="STDOUT"/>
    </root>
    <springProfile name="logback-test1">
        <logger name="com.baeldung.testloglevel" level="info"/>
    </springProfile>
    <springProfile name="logback-test2">
        <logger name="com.baeldung.testloglevel" level="trace"/>
    </springProfile>
</configuration>

現在如果我們用 TestLogLevelController 在我們的測試中調用帶有 logback-test1 配置文件,我們將得到以下輸出:

2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

相反,如果將配置文件更改為 logback-test2,則輸出將是:

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

5. Log4J 替代方案

如果使用 Log4J2,可以在 src/test/resources 目錄下的 log4j2-spring.xml 文件中 設置日誌級別

<Configuration>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                    pattern="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>

    <Loggers>
        <Logger name="com.baeldung.testloglevel" level="debug" />

        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

我們可以通過在 application.properties 中設置 logging.config 屬性來設置 Log4J 的配置路徑。

logging.config=classpath:log4j-testloglevel.xml

最後,讓我們檢查在應用上述設置後產生的輸出:

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

6. 結論

在本文中,我們學習了如何設置 Spring Boot 應用程序的日誌級別。 此外,我們還探討了多種配置方法。

在 Spring Boot 的 application.properties 中設置日誌級別是最簡單的方法,尤其當我們使用 @SpringBootTest 註解時。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.