1. 程式人生 > >Logback簡介及配置檔案logback.xml詳解

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

# 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
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n ${CATALINA_BASE}/aa.%d{yyyyMMdd}.log 30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n ${CATALINA_BASE}/bb.log ${CATALINA_BASE}/bb.%d{yyyyMMdd}.log 30 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
${CATALINA_BASE}/custom.log ${CATALINA_BASE}/custom.%d{yyyy-MM-dd}.log 30 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
``` 2. ###### 配置檔案說明 > > > ​ 一個元素 > > ​ 0或多個 > > ​ 0或多個 > > ![image](https://img2020.cnblogs.com/blog/1431162/202103/1431162-20210331122913649-1230750631.png) 3. ###### 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 4. ###### 列印級別 `TRACE`<`DEBUG`<`INFO`<`WARN`<`ERROR`,預設`DEBUG` ## logback快速上手 1. ###### 依賴的jar包: > slf4j-api > > logback-core > > logback-classic ```Java org.slf4j slf4j-api 1.7.5 ch.qos.logback logback-core 1.0.11 ch.qos.logback logback-classic 1.0.11 ``` 【注】其中slf4j-api不是logback的一部分,是另一個專案,通常結合使用 2. ###### 程式碼示例(兩種): ```Java // 第一種,直接宣告一個物件 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/57103