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 日志..."
);
}
}
|
(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
|
(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
|