SpringBoot - 日誌的配置和使用詳解(SLF4j、Logback)
阿新 • • 發佈:2020-11-26
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 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 日誌..." );
}
}
|
(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
|
(3)我們也可以只設置某個包的日誌級別,這樣能夠更方便準確地定位問題。比如下面配置,只對所有com.example包下面產生的日誌級別改成trace:
1 |
logging.level.com.example=trace
|
4,生成日誌檔案
(1)除了將日誌列印到控制檯中,專案上線後通常還需要將日誌輸出到檔案。我們只需要通過logging.file.path配置檔案存放路徑即可:1 |
logging.file.path=/Volumes/BOOTCAMP/log
|
1 |
logging.file.name=/Volumes/BOOTCAMP/log/my.log
|
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
|