Spring Cloud如何優雅打印日誌:slf4j+logback

最近在對項目的日誌進行優化,主要是如何減少不必要的日誌輸出,如何優化日誌輸出的性能,
以及當前code中,一些不規範的日誌輸出代碼的優化。基於此,對java日誌進行了一個系統的梳理。
今天這裏,主要分享一個點,乾貨!具體的理論就不再重複搬運了,大家可以自行搜索腦補。

 

Spring Cloud + Slf4j + Logback 架構打印日誌的正確姿勢

 

 

import lombok.extern.slf4j.Slf4j;

/**
 * @Descriptoin Spring Cloud優雅打印日誌
 *
 * 1,使用slf4j + logback
 * 2,儘量不要直接使用log4j,因爲slf4j進行了很多優化,詳情大家可以自行腦補
 *
 */
@Slf4j
public class Slf4JLoggerTest {

    public static void main(String[] args) {

        log.error("log.isErrorEnabled():{}, log.isInfoEnabled():{}, log.isDebugEnabled():{}, log.isWarnEnabled():{}, log.isTraceEnabled():{}",
                log.isErrorEnabled(), log.isInfoEnabled(), log.isDebugEnabled(), log.isWarnEnabled(), log.isTraceEnabled());

        // 正確的使用方式,Slf4j會自動判斷當前環境的日誌輸出級別,無需重複判斷
        log.error("log.isErrorEnabled():{}", log.isErrorEnabled());
        // 多此一舉的使用方式
        if (log.isErrorEnabled()) {
            log.error("加if判斷是多餘的 log.isErrorEnabled():{}", log.isErrorEnabled());
        }

        // 正確的使用方式,Slf4j會自動判斷當前環境的日誌輸出級別,無需重複判斷
        log.info("log.isInfoEnabled():{}", log.isInfoEnabled());
        // 多此一舉的使用方式
        if (log.isInfoEnabled()) {
            log.info("加if判斷是多餘的 log.isInfoEnabled():{}", log.isInfoEnabled());
        }

        // 正確的使用方式,Slf4j會自動判斷當前環境的日誌輸出級別,無需重複判斷
        log.debug("log.isDebugEnabled():{}", log.isDebugEnabled());
        // 多此一舉的使用方式
        if (log.isDebugEnabled()) {
            log.debug("加if判斷是多餘的 log.isDebugEnabled():{}", log.isDebugEnabled());
        }

    }

}

 

有的同學會說了,爲什麼我看Spring源碼裏面,很多都會先進行判斷呢,比如SpringApplication.class中,有這樣一段代碼:

if (logger.isErrorEnabled()) {
    logger.error("Application startup failed", exception);
    this.registerLoggedException(exception);
}

原因很簡單,因爲這裏使用的logger是Apache commons-logger,而不是slf4j+logback

大家可以結合自己的項目,看看姿勢是否正確。如果不正確,可以進行鍼對性的優化。

 

Spring Cloud集成slf4j和log4j-自定義日誌輸出級別
有時候我們需要調整日誌的輸出級別,比如爲了調試某個生產bug,我們需要臨時修改日誌輸出級別。

通常我們放在Spring Cloud配置文件application.properties或者application.yml文件中。


如何修改項目的日誌輸出級別呢?
如下:

# 設置全局logger日誌輸出級別
logging:
  level: error

# 設置指定包的logger日誌輸出級別
logging:
  level:
    xxx:
      xxxx:
        xxx: error

# 設置指定java類的logger日誌輸出級別
logging:
  level:
    xxx:
      xxxx:
        XxxClass: error

 

Slf4j + logback 打印日誌的最佳實踐
1,日誌級別使用不當
2,謹慎使用e.printStackTrace()
3,使用佔位符,而不是字符串拼接
4,儘量打印更少的日誌
5,儘量不要在for循環中log日誌

詳情講解,請參考我的另外一篇博客《Slf4j + logback 打印日誌的最佳實踐》

https://mp.csdn.net/console/editor/html/105298012

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章