1. 程式人生 > 實用技巧 >SpringBoot - 日誌的配置和使用詳解(SLF4j、Logback)

SpringBoot - 日誌的配置和使用詳解(SLF4j、Logback)

1,基本介紹

(1)市面上常見的日誌框架有很多。通常情況下,日誌是由一個抽象層+實現層的組合來搭建的,而使用者通常來說不應該直接使用具體的日誌實現類,應該使用日誌的抽象層。     抽象層:JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、jboss-logging     實現層:Log4j、JUL(java.util.logging)、Log4j2、Logback (2)SpringBoot預設選擇的是SLF4J+Logback的組合,如果不需要更改為其他日誌系統(如Log4j2等),則無需多餘的配置,LogBack預設會將日誌列印到控制檯上。   由於新建的Spring Boot專案一般都會引用spring-boot-starter或者spring-boot-starter-web,而這兩個起步依賴中都已經包含了對於spring-boot-starter-logging的依賴,所以,我們無需額外新增依賴。

2,基本用法

(1)這裡我們打印出5種不同級別的日誌,可以看到控制檯會輸出相關日誌資訊:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 @RestController publicclassHelloController { Logger logger = LoggerFactory.getLogger(getClass()); @GetMapping("/test") publicvoidtest(){ logger.trace("Trace 日誌..."); logger.debug("Debug 日誌..."); logger.info("Info 日誌..."
); logger.warn("Warn 日誌..."); logger.error("Error 日誌..."); } }

(2)如果專案有使用Lombok的話,直接使用@Slf4j註解可以省去從日誌工廠生成日誌物件這一步,直接進行日誌記錄。下面程式碼的效果同上面是一樣的:
1 2 3 4 5 6 7 8 9 10 11 12 13 @RestController @Slf4j publicclassHelloController { @GetMapping("/test") publicvoid
test(){ log.trace("Trace 日誌..."); log.debug("Debug 日誌..."); log.info("Info 日誌..."); log.warn("Warn 日誌..."); log.error("Error 日誌..."); } }

3,設定日誌級別

(1)日誌級別從小到大為trace<debug<info<warn<error<fatal,由於預設日誌級別設定為INFO,因此上面樣例trace和debug級別的日誌都看不到。 (2)我們可以在applicaition.properties檔案中修改日誌級別。比如下面將全域性日誌級別都改成trace,因此係統所有的日誌都能看到:
1 logging.level.root=trace

(3)我們也可以只設置某個包的日誌級別,這樣能夠更方便準確地定位問題。比如下面配置,只對所有com.example包下面產生的日誌級別改成trace:
1 logging.level.com.example=trace

4,生成日誌檔案

(1)除了將日誌列印到控制檯中,專案上線後通常還需要將日誌輸出到檔案。我們只需要通過logging.file.path配置檔案存放路徑即可:
1 logging.file.path=/Volumes/BOOTCAMP/log
(2)通過logging.file.path生成的日誌檔名字為spring.log,如果需要自定義檔名字,則通過logging.file.name屬性進行配置(此時不需要再配置logging.file.path):
1 logging.file.name=/Volumes/BOOTCAMP/log/my.log
(3)無論何種設定,Spring Boot都會自動按天分割日誌檔案,也就是說每天都會自動生成一個新的log檔案,而之前的會自動打成GZ壓縮包。 (4)除此之外,我們還可以設定日誌檔案的保留時間,以及單個檔案的大小:
1 2 3 4 # 日誌檔案大小 logging.file.max-size=10MB # 保留的日誌時間 logging.file.max-history=10

5,日誌輸出格式配置

(1)我們可以分別修改在控制檯輸出的日誌格式,以及檔案中日誌輸出的格式: 符號說明:
  • %d{HH:mm:ss.SSS}:日誌輸出時間
  • %-5level:日誌級別,並且使用5個字元靠左對齊
  • %thread:輸出日誌的程序名字,這在Web應用以及非同步任務處理中很有用
  • %logger:日誌輸出者的名字
  • %msg:日誌訊息
  • %n:平臺的換行符
1 2 3 4 # 修改在控制檯輸出的日誌格式 logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger : %msg%n # 修改輸出到檔案的日誌格式 logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger : %msg%n

(2)上面效果圖可以發現,原先Spring Boot預設使用Logback來進行日誌輸出時,控制檯不同引數會輸出為不同的顏色。而一旦我們修改了日誌格式,彩色也隨之消失。如果想讓不同型別的資料具有不同的高亮效果,可以改用如下配置:
1 2 3 4 # 修改在控制檯輸出的日誌格式 logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %clr(%5p) [%thread] %clr(%logger){cyan} : %msg%n # 修改輸出到檔案的日誌格式 logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger : %msg%n

(3)如果覺得類名太長(%logger),我們還可以將其設定個長度限制。比如下面限制長度為45個字元,超過得話包名部分會變成縮寫:
1 2 3 4 # 修改在控制檯輸出的日誌格式 logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %clr(%5p) [%thread] %clr(%logger{45}){cyan} : %msg%n # 修改輸出到檔案的日誌格式 logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger : %msg%n