Logback簡介及配置檔案logback.xml詳解

ergwang發表於2021-03-31

logback簡介及配置檔案說明

@author:wangyq

@date:2021年3月31日

logback簡介

​ Logback是由log4j創始人設計的另一個開源日誌元件,官方網站: http://logback.qos.ch

  1. logback的結構:主要由三個模組組成:
    • logback-core // 基礎模組,其他模組基於此

    • logback-classic // 它是log4j的一個改良版本,同時它完整實現了slf4j API,可以更換成其它日誌系統,如log4j

    • logback-access // 訪問模組與Servlet容器整合提供通過Http來訪問日誌的功能

  2. 用它取代log4j的理由在於以下優勢:

    ​ 做到了更快的實現、非常充分的測試、很自然地實現了SLF4、非常詳盡的官方文件、自動重新載入配置檔案、Lilith是log事件的觀察者,和log4j的chainsaw類似、謹慎的模式和非常友好的恢復(可以實現多個執行緒同時寫一個日誌檔案)、配置檔案可以處理不同的情況、Filters(過濾器)、SiftingAppender、自動壓縮已經打出來的log檔案、堆疊樹帶有包版本、自動去除舊的日誌檔案等。

logback.xml配置檔案詳解

  1. 配置檔案示例
    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- 配置檔案修改時重新載入,預設true -->
    <configuration scan="true">
        
        <!--定義日誌檔案的儲存地址 勿在 LogBack 的配置中使用相對路徑-->
        <property name="CATALINA_BASE" value="**/logs"></property>
        
        <!-- 控制檯輸出 -->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder charset="UTF-8">
                <!-- 輸出日誌記錄格式 -->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
     
        <!-- 第一個檔案輸出,每天產生一個檔案 -->
        <appender name="FILE1" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 輸出檔案路徑+檔名 -->
                <fileNamePattern>${CATALINA_BASE}/aa.%d{yyyyMMdd}.log</fileNamePattern>
                <!-- 儲存30天的日誌 -->
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder charset="UTF-8">
                <!-- 輸出日誌記錄格式 -->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
     
        <!-- 第二個檔案輸出,每天產生一個檔案 -->
        <appender name="FILE2" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${CATALINA_BASE}/bb.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${CATALINA_BASE}/bb.%d{yyyyMMdd}.log</fileNamePattern>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder charset="UTF-8">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
        
        <appender name="CUSTOM" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${CATALINA_BASE}/custom.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- daily rollover -->
                <fileNamePattern>${CATALINA_BASE}/custom.%d{yyyy-MM-dd}.log</fileNamePattern>
                <!-- keep 30 days' worth of history -->
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder charset="UTF-8">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
        
        <!-- 設定日誌輸出級別 -->
        <root level="ERROR">
            <appender-ref ref="CONSOLE" />
        </root>
        <logger name="file1" level="DEBUG">
            <appender-ref ref="FILE1" />
        </logger>
        <logger name="file1" level="INFO">
            <appender-ref ref="FILE2" />
        </logger>
        <!-- 自定義logger -->
        <logger name="custom" level="INFO">
            <appender-ref ref="CUSTOM" />
        </logger>
    </configuration>
    
  2. 配置檔案說明

    ​ 一個元素

    ​ 0或多個

    ​ 0或多個

image

  1. logback配置檔案載入說明

    logback在啟動時:

    1. 在 classpath 中尋找 logback-test.xml檔案
    2. 如果找不到 logback-test.xml,則在 classpath 中尋找 logback.groovy 檔案
    3. 如果找不到 logback.groovy,則在 classpath 中尋找 logback.xml檔案
    4. 如果上述的檔案都找不到,則 logback 會使用 JDK 的 SPI 機制查詢 META-INF/services/ch.qos.logback.classic.spi.Configurator 中的 logback 配置實現類,這個實現類必須實現 Configuration 介面,使用它的實現來進行配置
    5. 如果上述操作都不成功,logback 就會使用它自帶的 BasicConfigurator 來配置,並將日誌輸出到 console
  2. 列印級別

    TRACE<DEBUG<INFO<WARN<ERROR,預設DEBUG

logback快速上手

  1. 依賴的jar包:

    slf4j-api

    logback-core

    logback-classic

       <dependency>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-api</artifactId>
           <version>1.7.5</version>
       </dependency>
       <dependency>
           <groupId>ch.qos.logback</groupId>
           <artifactId>logback-core</artifactId>
           <version>1.0.11</version>
       </dependency>
       <dependency>
           <groupId>ch.qos.logback</groupId>
           <artifactId>logback-classic</artifactId>
           <version>1.0.11</version>
       </dependency>
    

    【注】其中slf4j-api不是logback的一部分,是另一個專案,通常結合使用

  2. 程式碼示例(兩種):
    // 第一種,直接宣告一個物件
    public class Slf4JLoggerTest1 {
        private static final Logger logger = LoggerFactory.getLogger(SimpleDemo.class);
        public static void main(String[] args) {
            logger.info("Hello,tese1, this is a line of log message logged by Logback");
        }
    }
    
    
    // 第二種,在類的配置上新增@slf4j註解(**藉助lombok實現,原理同第一種**)
    @Slf4j
    public class Slf4JLoggerTest2 {
        public static void main(String[] args) {
            log.info("Hello,tese2, this is a line of log message logged by Logback");
        }
    }
    

參考資料:

​ [1] logback配置詳解https://segmentfault.com/a/1190000008315137

​ [2] logback的使用和logback.xml詳解https://www.cnblogs.com/warking/p/5710303.html

相關文章