天天看點

Spring Boot 進階- Spring Boot日志架構介紹

作者:架構師面試寶典
Spring Boot 進階- Spring Boot日志架構介紹

在學習Spring Boot日志架構之前,首先我們需要掌握日志架構都有什麼,怎麼用?如何用等問題,下面我們就來帶着這些問題來看Spring Boot 日志架構相關的内容吧。

日志架構有那些?

在開發中我們經常用到的日志架構有log4j、logback、log4j2等等。其中log4j是又是我們在開發過程中經常聽到的一個日志架構。因為在Spring 架構中使用的就是log4j架構,但是現在log4j官方已經不太維護了,在性能方面相比于logback、log4j2也略有遜色。

Spring Boot 進階- Spring Boot日志架構介紹

logback是log4j的開發者重新設計開發的另外的一套開源的日志架構,相比于log4j來說性能也提升了很多。作為Spring Boot架構的預設日志架構在各種性能上有着不小的優勢。

log4j2相當于logback來說出現較晚,在官方的性能介紹中要比logback好,但是沒有再具體的進階項目中大面積的使用過。log4j2在很多的設計理念上與logback是類似的。雖然作為Apache的官方項目,但在Spring等相關架構中也沒有得到太多的使用。

那麼既然日志架構有很多,如何能在項目中選擇适合項目開發的架構也就無可厚非了。對于普通開發者來講雖然不需要掌握太多的關于日志架構底層的東西,但是隻是我們需要了解日志架構都有哪些,這樣有利于在開發中更好的選擇合适的日志架構。

Spring Boot中的日志架構

在Spring Boot中 預設使用的日志架構是logback。使用logback作為Spring Boot架構的預設日志架構,一定是因為logback是經受住了很多項目開發的考驗的,是以建議在一般的開發中不要随意的更換日志架構。由于是預設引入的日志架構,是以這裡我們不需要在POM檔案中添加對應的依賴。

下面我們來看一下在IDEA中輸出的日志,預設是INFO級别的日志。

Spring Boot 進階- Spring Boot日志架構介紹

如圖所示,在Console日志中輸出的内容有如下一些

  • 日期時間:精确到了毫秒級别
  • 日志的級别:ERROR、WARN、INFO、DEBUG、TRACE
  • 所屬程序ID号
  • 日志分割符:通常是中劃線表示日志的開始
  • 日志所屬線程名:使用中括号括起來
  • 日志名:一般是類名路徑
  • 輸出日志内容

Spring Boot項目中如何使用日志

在實際業務開發中,為了能擷取到各種代碼執行資訊,就需要使用到日志追溯對應的操作。在代碼中使用日志的方式有兩種

一種是比較傳統的日志注入方式,就是在每個類中引入私有的日志輸出的入口代碼。如下所示

private final Logger log = LoggerFactory.getLogger(PropertiesController.class);           

這種方式在之前的開發中,是經常會被使用到的,比較麻煩,需要在每個類中添加這樣一段代碼。

使用logback

首先需要在pom檔案中引入對應的依賴。

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
     </dependency>           

在使用的時候隻需要在類上加上一個@Slf4j 的注解就可以了,代碼如下

@Slf4j
public class LogFramework {

    public void testLog(){
        log.info("輸出INFO日志");
    }
}
           

如何設定日志級别

在實際開發中我們經常會用到的幾種日志級别從低到高分别是:TRACE<DEBUG<INFO<WARN<ERROR<FATAL。

這裡需要說明的是在日志架構中輸出的日志級别支援隻有如下一些

@Slf4j
public class LogFramework {

    public void testLog(){
        log.trace("輸出TRACE日志級别");
        log.debug("輸出DEBUG日志級别");
        log.info("輸出INFO日志級别");
        log.warn("輸出WARN日志級别");
        log.error("輸出ERROR日志級别");
    }
}           

如果在日志級别中設定了其中的一個級别,那麼比他級别更低級别的日志将不會顯示。

Spring Boot 進階- Spring Boot日志架構介紹

如圖所示,在Spring Boot中預設日志級别是INFO級别的日志,是以在日志輸出的時候隻有INFO級别及以上的日志被輸出了。

那麼我們怎麼控制日志級别的輸出呢?在之前我們提到過Spring Boot是允許通過配置來修改自動配置項的,是以我們隻需要在配置檔案中添加如下的内容就可以調整日志級别了。

logging:
  level:
    root: debug           

通過上面的配置可以将所有的日志級别都調整成了DEBUG,當然Spring Boot 也支援修改package級别的日志調整,格式如下,

logging:
  level:
    com.example.demo: debug
           

完成上面的配置就隻是把demo包下的所有日志操作改成debug級别了。

Spring Boot 進階- Spring Boot日志架構介紹

經過測試之後,會發現與我們描述的是一樣的,列印出來的日志級别也發生了變化。

總結

這篇文章中,我們介紹了Spring Boot架構中如何使用日志,以及關于使用日志的一些注意事項。了解關于日志級别調整的配置。但是這些都是預設配置,那麼我們如何自定義日志的輸出路徑,以及自定義日志的輸出格式呢?下一篇文章我們來一起研究關于如何自定義日志輸出

繼續閱讀