SLF4J記錄日誌&&日誌檔案的滾動策略__SpringBoot

Ashe|||^_^發表於2024-03-22

Logback 是 Log4j 的作者的另一個開源日誌元件,與 Log4j 相比,Logback 重新了核心,使它的效能提升了很多,大約是 Log4j 的 10 倍,同時佔用更小的記憶體,並且完整的實現了 SLF4J API 是你可以很方便的切換日誌框架。

SpringBoot 預設整合了 Logback,可以開箱即用,對於中小型專案,個人更傾向於推薦使用 Logback。

使用示例

public class MyClass {

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

    public void someMethod() {
        logger.info("This is an info log");
        logger.error("This is an error log");
    }

}

在 src/main/resources 目錄下建立一個名為 logback.xml 或 logback-spring.xml 的檔案,並在其中定義滾動策略

<configuration>
    <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--
            ${LOG_PATH:logs} 這樣的配置使用了 Spring Boot 的屬性佔位符語法。
            這個語法的含義是,如果存在名為 LOG_PATH 的環境變數,則使用該環境變數的值作為日誌路徑;
            如果不存在 LOG_PATH 環境變數,則使用預設值 logs。
            在 Spring Boot 中,如果沒有顯式地為屬性指定值,那麼會使用預設值。
            在這個例子中,預設值為 logs,所以如果沒有在其他地方顯式地設定 LOG_PATH 環境變數,
            日誌檔案將會被放置在專案根路徑下的 logs 資料夾中。
        -->
        <!-- 日誌檔名 -->
        <file>${LOG_PATH:logs}/${LOG_FILE:application_name}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 觸發滾動策略時重新命名格式 -->
            <fileNamePattern>${LOG_PATH:logs}/${LOG_FILE:myapplication}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 日誌檔案保留的最大數量 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <!-- 日誌輸出格式 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="fileAppender" />
    </root>
</configuration>

相關文章