天天看點

spring boot --接入@SLF4J日志

前言

  目前比較流行的日志架構有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";
    }
    
}