SLF4J :JAVA簡易日誌門面(Simple Logging Facade for Java,縮寫SLF4J)php
他是一套包裝Logging 框架的接口程式,以外觀模式實現。可在軟件部署的時候決定要使用的 Logging 框架,目前主要支援的有Java Logging API、log4j及logback等框架。以MIT 受權方式發佈。java
SLF4J 做者就是 log4j 的做者 Ceki Gülcü,他宣稱 SLF4J 比 log4j 更有效率,比 Apache Commons Logging (JCL) 簡單、穩定。程序員
SLF4J 與 log4j 的比較:框架
一、log4j 提供 TRACE, DEBUG, INFO, WARN, ERROR 及 FATAL 六種紀錄等級,可是 SLF4J 認爲 ERROR 與 FATAL 並無實質上的差異,因此拿掉了 FATAL 等級,只剩下其餘五種。編碼
二、大部分人在程序裏面會去寫logger.error(exception),其實這個時候log4j回去把這個exception tostring。真正的寫法應該是logger(message.exception);而slf4j就不會使得程序員犯這個錯誤。spa
三、log4j間接的在鼓勵程序員使用string相加的寫法,而slf4j就不會有這個問題 ,你可使用logger.error("{} is+serviceid",serviceid);debug
四、使用slf4j能夠方便的使用其提供的各類集體的實現的jar。(相似commons-logger)日誌
五、從commons--logger和log4j merge很是方便,slf4j也提供了一個swing的tools來幫助你們完成這個merge。code
六、提供字串內容替換的功能,會比較有效率,說明以下:接口
//傳統的字符串產生方式,若是沒有要記錄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);
七、SLF4J 只支持 MDC,不支持 NDC。