SpringBoot從入門到精通-第8章 日志的操作
一、Spring Boot默認的日志框架
SpringBoot支持很多種日志框架,通常情況下,這些日志框架都是由一個日志抽象層和一個日志實現層搭建而成的,日志抽象層是為記錄日志提供的一套標準且規范的框架,其作用是為記錄日志提供接口,日志實現層是由日志抽象層實現的框架。
在SpringBoot中,常見的日志抽象層由jcl、slf4j、jboos-logging等。常見的日志實現層由log4j、jul、log4j2、logback等。SpringBoot默認使用的抽象層是slf4j,默認使用的日志實現層是logback。
二、打印日志
在使用slf4j打印日志時,需要創建日志對象,創建日志對象的語法如下:
Logger log = LoggerFactory.getLogger(所在類.class);
例如:在TestController類例創建日志對象,那么getLogger()方法的參數就要寫成TestController.class,實例代碼如下:
package com.example._20250605springboot_log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;//import java.util.logging.Logger;@RestController
public class TestController {
//private static final Logger log = LoggerFactory.getLogger(getClass());
Logger log = LoggerFactory.getLogger(TestController.class);
@RequestMapping("/index")public String index(String val1,String val2){log.info("This is index");
// log.info("val1={},val2={}",val1,val2);log.info("val1="+val1+"----val2="+val2);return "";
}
}
運行程序,訪問http://localhost:8080/index,控制臺輸出
2025-06-07T08:52:49.578+08:00 INFO 3140 --- [20250605springboot_log] [nio-8080-exec-3] c.e._.TestController : This is index
2025-06-07T08:52:49.578+08:00 INFO 3140 --- [20250605springboot_log] [nio-8080-exec-3] c.e._.TestController : val1=null----val2=null
2025-06-07T09:10:55.458+08:00 INFO 3140 --- [20250605springboot_log] [nio-8080-exec-7] c.e._.TestController : This is index
2025-06-07T09:10:55.459+08:00 INFO 3140 --- [20250605springboot_log] [nio-8080-exec-7] c.e._.TestController : val1=null----val2=null
三、解讀日志
2025-06-07T08:52:49.578+08:00 INFO 3140 --- [20250605springboot_log] [nio-8080-exec-3] c.e._.TestController : This is index
解讀:
2025-06-07T08:52:49.578+08:00 : 打印日志具體的時間到毫秒級
INFO :打印日志的級別
3140 :當前項目的進程編號(PID)
“—” : 分隔符,五實際意義
[20250605springboot_log] [nio-8080-exec-3] :打印日志的線程名稱
c.e._.TestController : 日志是由項目的哪個類打印的,這里由于包名有點長,省略寫法
This is index : 輸出的信息
四、保存日志
4.1保存日志文件的生成位置
在application.properties配置文件中配置:
logging.file.path=.
點表示項目位置的當前目錄下,且日志名為spring。可以自定義日志文件位置
4.2指定日志文件的生成名稱
在application.properties配置文件中配置:
logging.file.name=${logging.file.path}\\test.log
4.3為日志文件添加約束
指定日志文件的最大保存天數
在application.properties配置文件中配置:
logging.logback.rollingpolicy.max-history=2
指定日志文件的最大容量
在application.properties配置文件中配置:
logging.logback.rollingpolicy.max-file-size=2KB
指定歸檔文件的名稱格式
默認
${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
啟動項目自動壓縮日志文件
在application.properties配置文件中配置:
logging.logback.rollingpolicy.clean-history-on-start=true
啟動項目后遍歷打印很多內容驗證日志文件壓縮和大小
五、調整日志
5.1設置日志級別
- ERROR
- WARN
- INFO
- DEBUG
- TRACE
ERROR > WARN > INFO > DEBUG > TRACE
在application.properties配置文件中配置:
logging.level.com.example._20250605springboot_log.TestController=debug
5.2設置日志格式
- %date{yyyy-MM-dd HH:mm:ss.SSS} 時間
- %5level 日志級別
- ${PID} 進程號
- %15.15t %t表示線程名 15.15表示最短或最長為15個字符
- %-40.40logger{39}
- %m 具體的內容
- %n 換行符
設置日志文件格式
在application.properties配置文件中配置:
logging.pattern.file=
設置控制臺打印格式
在application.properties配置文件中配置:
logging.pattern.console=
六、logback.xml配置
logback.xml配置文件和application.properties配置文件都被存儲在resource目錄下,logback.xml的優先級高于application.properties。都存在,會采用logback.xml的配置。
七、遇到的問題
1、import導入logger類的時候要注意導入的是下面的路徑
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
剛開始創建類直接引用Logger log 時候springboot會自動導入logger路徑的類,但是程序提示錯誤“不兼容的類型”,自動導入的路徑為:
import java.util.logging.Logger;
然后修改了上面的導入路徑為:
import org.slf4j.Logger;
就可以正常使用了。