前言
目前比較流行的日志架構有log4j、logback等,可能大家還不知道,這兩個架構的作者是同一個人,Logback旨在作為流行的log4j項目的後續版本,進而恢複log4j離開的位置。另外 slf4j(Simple Logging Facade for Java) 則是一個日志門面架構,提供了日志系統中常用的接口,logback 和 log4j 則對slf4j 進行了實作,等于說slf4j 是一個規範接口,你可以通過它調用logback 和 log4j的實作功能
為什麼選擇slf4j?
1.spring boot核心庫內建了slf4j 架構,不需要在pom.xml中再引入
2.使用的人多
3.logback 和 log4j 則對slf4j 進行了實作,等于說slf4j是一個規範,整合了log4j和logback
使用
spring boot中slf4j會有一些預設配置,在沒有要求(比如自定義日志輸出模闆,自定義日志放置目錄)的情況下,我們可以直接使用
@RestController
public class Index {
//通過LoggerFactory類,擷取到日志類的執行個體對象
private final Logger log = LoggerFactory.getLogger(Index.class); //注意Logger和LoggerFactory類是處于org.slf4j命名空間下
@RequestMapping("login")
public Object index() {
log.info("info");//輸出消息日志
log.warn("warning");//輸出警告日志
log.error("error");//輸出錯誤日志
return "end";
}
}
上面的代碼執行後,就可以看到idea的控制台内,會出現三條對應的日志消息。而在C:\Users\登入使用者~1\AppData\Local\Temp\目錄下也會生成對應的日志檔案(名字是一堆hash字元)
配置日志自定義輸出
如果我們想定義日志的輸出格式和輸出位置,那麼就需要進行相應配置
配置日志檔案輸出路徑
在application.yml中添加配置
spring:
......
logging: //與spring同級
file:
name: logs/log.log //指定輸出日志目錄
配置日志輸出格式
在application.yml中增加配置
spring:
......
logging: //與spring同級
# file:
# name: logs/log.log //去除日志輸出配置
config: classpath:log.config.xml //指定slf4j配置檔案,我們可以在這裡面配置日志輸出目錄,同一個庫的配置盡量放在一塊
在log.config.xml中配置
... @slf4j配置詳解
使用@SLF4J注解
每次使用Logger,都需要通過LoggerFactory去擷取Logger執行個體比較麻煩
private final Logger log = LoggerFactory.getLogger(目前類.class);
可以使用@SLF4J
@Slf4j //注解目前類
@RestControllerpublic class TestController {
@RequestMapping("login")public String index(){
log.debug("可以直接調用log列印日志了");
return "testPrint";
}
}
使用@SLF4J需要幾個步驟
1.idea下載下傳安裝lombok插件,(2021版本後的idea一般都捆綁安裝了,高版本的idea可以省略此步驟)
lombok簡介:java自動生成代碼的插件。它能提高開發效率,減少自己編寫繁瑣的代碼,讓代碼看起來更整潔簡略,比如getter、setter、equals以及construct等方法。其也有val、var這種自動判斷變量類型的變量定義方式(類似javascript中的let、const)
lombok安裝:javascript:void(0)
lombok詳解:javascript:void(0)
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
@Slf4j //注解目前類
@RestController
public class TestController {
@RequestMapping("login")
public String index(){
log.debug("可以直接調用log列印日志了");
return "testPrint";
}
}