最近在對項目的日誌進行優化,主要是如何減少不必要的日誌輸出,如何優化日誌輸出的性能,
以及當前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