知識庫 / Spring / Spring Boot RSS 訂閱

Spring Boot 文件和控制枱輸出 Appender 不同的日誌級別

Logging,Spring Boot
HongKong
4
10:43 AM · Dec 06 ,2025

1. 概述

當我們構建 Spring Boot 應用時,我們都知道良好的日誌記錄至關重要,它能幫助我們觀察、排查問題並真正理解應用程序的運行流程。

在本文中,我們將探討如何使用 Logback,Spring Boot 的默認日誌框架,來實現 FILECONSOLE 附加器之間的日誌級別分離。

2. 項目設置

在深入配置日誌記錄本身之前,我們需要一個可運行的 Spring Boot 應用程序作為演示示例。讓我們逐步瞭解如何設置我們的項目。

2.1. 添加依賴

Logback 和 SLF4J 是 Spring Boot 的默認日誌實現。如果我們在已經使用了 spring-boot-starter-web 或任何其他包含 spring-boot-starter-logging 的 Spring Boot starter 時,則適用。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.2. 創建控制器

接下來,我們創建一個簡單的控制器來生成一些日誌消息用於測試:

@RestController
public class LogController {

    private static final Logger logger = LoggerFactory.getLogger(LogController.class);

    @GetMapping("/log")
    public String generateLogs() {
        logger.trace("This is a TRACE message from controller.");
        logger.debug("This is a DEBUG message from controller.");
        logger.info("This is an INFO message from controller.");
        logger.warn("This is a WARN message from controller.");
        logger.error("This is an ERROR message from controller.");
        return "Logs generated!";
    }
}

日誌級別遵循嚴格的層級結構:TRACE 是最低級別,然後是 DEBUG, INFO, WARN, ERROR, 和 FATAL

當為應用器或日誌器定義日誌級別時,我們確保只處理該特定級別及其更高級別的消息。

3. 創建 logback-spring.xml 文件

我們的解決方案的核心在於 logback-spring.xml 文件。我們只需將該文件放置在我們的 src/main/resources 目錄下,Spring Boot 就會自動將其拾取。 這允許我們精確地定義我們記錄的內容、這些日誌存儲的位置以及詳細程度。

3.1. 屬性標籤

讓我們先來看一下屬性標籤:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOGS_HOME" value="./logs"/>
    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <property name="FILE_NAME" value="my-spring-app"/>
<configuration>

這些變量定義了常見的數值,例如日誌存儲位置 (LOGS_HOME)、控制枱輸出格式 (CONSOLE_LOG_PATTERN)、文件輸出格式 (FILE_LOG_PATTERN) 以及日誌文件的基本名稱 (FILE_NAME)。 使用屬性使得配置更加簡潔,也更容易更新。

3.2 ˜  控制枱輸出器標籤

本節定義了我們控制枱上的日誌處理方式:

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
</appender>

對於我們的控制枱輸出,我們定義了一個名為“CONSOLE”的輸出器。它指示Logback使用其內置的ConsoleAppender將輸出直接發送到我們的標準控制枱。在該輸出器中,我們使用一個<encoder>來將我們的原始日誌消息轉換為可讀格式。<Pattern>標籤位於此編碼器內部,它應用我們預定義的CONSOLE_LOG_PATTERN,從而確保所有控制枱日誌的一致性和易讀性。

至關重要的是,我們隨後引入了一個過濾器:<filter class=”ch.qos.logback.classic.filter.ThresholdFilter”>這是一個控制我們日誌級別的關鍵組件;當控制枱的ThresholdFilter設置為INFO時,我們僅顯示日誌級別為INFO或更高的消息,這意味着INFO, WARN, ERROR,FATAL消息。

3.3. 文件追加器

讓我們分解一下我們的文件追加器的各個部分:

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${LOGS_HOME}/${FILE_NAME}.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>${FILE_LOG_PATTERN}</Pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>DEBUG</level>
    </filter>
</appender>

對於我們的文件輸出,我們定義了一個名為“FILE”的輸出器,選擇 ch.qos.logback.core.FileAppender 作為其類。這告訴Logback我們只需要一個輸出器,將所有日誌寫入到一個單一的、不斷增長的文件中。我們指定了活動日誌文件的確切路徑:<file>${LOGS_HOME}/${FILE_NAME}.log</file>。這解析為 ./logs/my-spring-app.log。 就像我們使用控制枱一樣,這裏我們也使用了 <encoder>。它使用我們的 FILE_LOG_PATTERN 格式化每個日誌條目,以實現一致的可讀性。

最後,我們添加了一個關鍵的 <filter class=”ch.qos.logback.classic.filter.ThresholdFilter”>,該過濾器專門針對此文件輸出器。我們設置了閾值為 DEBUG,這意味着任何日誌消息的嚴重級別為 DEBUG 或更高(即 DEBUG, INFO, WARN, ERROR, FATAL)都將被捕獲並寫入我們的日誌文件。

3.4. 根日誌器

本節定義了我們的日誌消息在應用程序中如何路由和處理。

<root level="DEBUG">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
</root>

我們的 <root level=”DEBUG”> 作為我們整個應用程序的默認、通用的記錄器;我們應用程序中產生的任何日誌消息最終都會通過該根記錄器。 我們將其主要級別設置為 DEBUG,這意味着它會考慮級別為 DEBUG 或更高的消息。 從這裏,我們告訴該根記錄器將它處理的所有日誌消息發送到我們的 CONSOLEFILE 附加器。

重要的是要記住,我們的 CONSOLE 附加器 本身具有自己的過濾器,設置為 INFO,因此它最終只會顯示滿足其 INFO 級別或更高標準的日誌。 同樣,我們還將根記錄器處理的消息發送到我們的 FILE 附加器,該附加器設置為 DEBUG

現在我們可以運行應用程序並訪問 localhost:8080/log 端點以查看生成的日誌。

4. 結論

在本教程中,我們演示瞭如何在 Spring Boot 應用程序中使用 Logback 的 ThresholdFilter,通過配置不同的日誌級別,分別針對 FILECONSOLE 附加器,從而實現這一點的。 這使我們能夠根據特定需求定製日誌輸出,保持控制枱簡潔明瞭,用於日常監控,同時在日誌文件中保留詳細的 DEBUG 級別信息,以便進行全面的分析。

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

發佈 評論

Some HTML is okay.