比較 SLF4J 與 log4j

jopen 10年前發布 | 53K 次閱讀 日志處理 SLF4j

SLF4J :JAVA簡易日志門面Simple Logging Facade for Java,縮寫SLF4J)

他是一套包裝Logging 框架的接口程式,以外觀模式實現。可在軟件部署的時候決定要使用的 Logging 框架,目前主要支援的有Java Logging APIlog4jlogback等框架。以MIT 授權方式發布。

SLF4J 作者就是 log4j 的作者 Ceki Gülcü,他宣稱 SLF4J 比 log4j 更有效率,比 Apache Commons Logging (JCL) 簡單、穩定。


SLF4J 與 log4j 的比較:

1、log4j 提供 TRACE, DEBUG, INFO, WARN, ERROR 及 FATAL 六種紀錄等級,但是 SLF4J 認為 ERROR 與 FATAL 并沒有實質上的差別,所以拿掉了 FATAL 等級,只剩下其他五種。


2、大部分人在程序里面會去寫logger.error(exception),其實這個時候log4j回去把這個exception tostring。真正的寫法應該是logger(message.exception);而slf4j就不會使得程序員犯這個錯誤。


3、log4j間接的在鼓勵程序員使用string相加的寫法,而slf4j就不會有這個問題 ,你可以使用logger.error("{} is+serviceid",serviceid);


4、使用slf4j可以方便的使用其提供的各種集體的實現的jar。(類似commons-logger)


5、從commons--logger和log4j merge非常方便,slf4j也提供了一個swing的tools來幫助大家完成這個merge。


6、提供字串內容替換的功能,會比較有效率,說明如下:

//傳統的字符串產生方式,如果沒有要記錄Debug等級的信息,就會浪費時間在產生不必要的信息上
logger.debug("There are now " + count + " user accounts: " + userAccountList);

//為了避免上述問題,我們可以先檢查是不是開啟了Debug信息記錄功能,只是程序的編碼會比較復雜
if (logger.isDebugEnabled()) {
    logger.debug("There are now " + count + " user accounts: " + userAccountList);
}

//如果Debug等級沒有開啟,則不會產生不必要的字符串,同時也能保持程序編碼的簡潔
logger.debug("There are now {} user accounts: {}", count, userAccountList);

7、SLF4J 只支持 MDC,不支持 NDC。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!