logback簡介及配置檔案說明
@author:wangyq
@date:2021年3月31日
logback簡介
Logback是由log4j創始人設計的另一個開源日誌元件,官方網站: http://logback.qos.ch。
-
logback的結構:主要由三個模組組成:
-
logback-core // 基礎模組,其他模組基於此
-
logback-classic // 它是log4j的一個改良版本,同時它完整實現了slf4j API,可以更換成其它日誌系統,如log4j
-
logback-access // 訪問模組與Servlet容器整合提供通過Http來訪問日誌的功能
-
-
用它取代log4j的理由在於以下優勢:
做到了更快的實現、非常充分的測試、很自然地實現了SLF4、非常詳盡的官方文件、自動重新載入配置檔案、Lilith是log事件的觀察者,和log4j的chainsaw類似、謹慎的模式和非常友好的恢復(可以實現多個執行緒同時寫一個日誌檔案)、配置檔案可以處理不同的情況、Filters(過濾器)、SiftingAppender、自動壓縮已經打出來的log檔案、堆疊樹帶有包版本、自動去除舊的日誌檔案等。
logback.xml配置檔案詳解
-
配置檔案示例
<?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>
-
配置檔案說明
一個
元素 0或多個
0或多個
-
logback配置檔案載入說明
logback在啟動時:
- 在 classpath 中尋找 logback-test.xml檔案
- 如果找不到 logback-test.xml,則在 classpath 中尋找 logback.groovy 檔案
- 如果找不到 logback.groovy,則在 classpath 中尋找 logback.xml檔案
- 如果上述的檔案都找不到,則 logback 會使用 JDK 的 SPI 機制查詢 META-INF/services/ch.qos.logback.classic.spi.Configurator 中的 logback 配置實現類,這個實現類必須實現
Configuration
介面,使用它的實現來進行配置 - 如果上述操作都不成功,logback 就會使用它自帶的
BasicConfigurator
來配置,並將日誌輸出到 console
-
列印級別
TRACE
<DEBUG
<INFO
<WARN
<ERROR
,預設DEBUG
logback快速上手
-
依賴的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的一部分,是另一個專案,通常結合使用
-
程式碼示例(兩種):
// 第一種,直接宣告一個物件 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