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
public  class  HelloController {
 
     Logger logger = LoggerFactory.getLogger(getClass());
 
     @GetMapping ( "/test" )
     public  void  test(){
         logger.trace( "Trace 日志..." );
         logger.debug( "Debug 日志..." );
         logger.info( "Info 日志..." );
         logger.warn( "Warn 日志..." );
         logger.error( "Error 日志..." );
     }
}
                                                  原文:SpringBoot - 日志的配置和使用詳解(SLF4j、Logback)

(2)如果項目有使用 Lombok 的話,直接使用 @Slf4j 注解可以省去從日志工廠生成日志對象這一步,直接進行日志記錄。下面代碼的效果同上面是一樣的:
1
2
3
4
5
6
7
8
9
10
11
12
13
@RestController
@Slf4j
public  class  HelloController {
 
     @GetMapping ( "/test" )
     public  void  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
                                                  原文:SpringBoot - 日志的配置和使用詳解(SLF4j、Logback)

(3)我們也可以只設置某個包的日志級別,這樣能夠更方便准確地定位問題。比如下面配置,只對所有 com.example 包下面產生的日志級別改成 trace:
1
logging.level.com.example=trace
                                                原文:SpringBoot - 日志的配置和使用詳解(SLF4j、Logback)

4,生成日志文件

(1)除了將日志打印到控制台中,項目上線后通常還需要將日志輸出到文件。我們只需要通過 logging.file.path 配置文件存放路徑即可:
1
logging.file.path=/Volumes/BOOTCAMP/log
                                              原文:SpringBoot - 日志的配置和使用詳解(SLF4j、Logback)
 
(2)通過 logging.file.path 生成的日志文件名字為 spring.log,如果需要自定義文件名字,則通過 logging.file.name 屬性進行配置(此時不需要再配置 logging.file.path):
1
logging.file.name=/Volumes/BOOTCAMP/log/my.log
                                                  原文:SpringBoot - 日志的配置和使用詳解(SLF4j、Logback)
 
(3)無論何種設置,Spring Boot 都會自動按天分割日志文件,也就是說每天都會自動生成一個新的 log 文件,而之前的會自動打成 GZ 壓縮包。
                                              原文:SpringBoot - 日志的配置和使用詳解(SLF4j、Logback)
(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
                                                原文:SpringBoot - 日志的配置和使用詳解(SLF4j、Logback)

(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
                                               原文:SpringBoot - 日志的配置和使用詳解(SLF4j、Logback)

(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
                                             原文:SpringBoot - 日志的配置和使用詳解(SLF4j、Logback)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM