Logback簡介及配置檔案logback.xml詳解
阿新 • • 發佈: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
%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