JAVA簡易日誌門面(Simple Logging Facade for Java,縮寫SLF4J),是一套包裝Logging 框架的介面程式,以外觀模式實現。可以在軟件部署的時候決定要使用的 Logging 框架,目前主要支援的有Java Logging APIlog4jlogback等框架。以MIT 授權方式發佈。

SLF4J的標誌

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

與 log4j 的比較

編輯
  • log4j 提供 TRACE, DEBUG, INFO, WARN, ERROR 及 FATAL 六種紀錄等級,但是 SLF4J 認為 ERROR 與 FATAL 並沒有實質上的差別,所以拿掉了 FATAL 等級,只剩下其他五種。
  • 大部分人在程序裏面會去寫logger.error(exception),其實這個時候log4j會去把這個exception tostring。真正的寫法應該是logger(message, exception);而slf4j就不會使得程式設計師犯這個錯誤。
  • log4j間接的在鼓勵程式設計師使用string相加的寫法,而slf4j就不會有這個問題 ,你可以使用logger.error("{} is+serviceid",serviceid);
  • 使用slf4j可以方便的使用其提供的各種集體的實現的jar。(類似commons-logger)
  • 從commons--logger和log4j merge非常方便,slf4j也提供了一個swing的tools來幫助大家完成這個merge。
  • 提供字串內容替換的功能,會比較有效率,說明如下:
// 传统的字符串产生方式,如果没有要记录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。