閱讀331 返回首頁    go 阿裏雲 go 技術社區[雲棲]


slf4j-api、slf4j-log4j12以及log4j之間的關係

幾乎在每個jar包裏都可以看到log4j的身影,在多個子工程構成項目中,slf4j相關的衝突時不時就跳出來讓你不爽,那麼slf4j-api、slf4j-log4j12還有log4j是什麼關係? 
   
slf4j:Simple Logging Facade for Java,為java提供的簡單日誌Facade。Facade門麵,更底層一點說就是接口。它允許用戶以自己的喜好,在工程中通過slf4j接入不同的日誌係統。更直觀一點,slf4j是個數據線,一端嵌入程序,另一端鏈接日誌係統,從而實現將程序中的信息導入到日誌係統並記錄。

 

因此slf4j入口就是眾多接口的集合,它不負責具體的日誌實現,隻在編譯時負責尋找合適的日誌係統進行綁定。具體有哪些接口,全部都定義在slf4j-api中。查看slf4j-api源碼就可以發現,裏麵除了public final class LoggerFactory類之外,都是接口定義。因此slf4j-api本質就是一個接口定義。


下圖比較清晰的描述了它們之間的關係,例子為當係統采用log4j作為日誌框架實現的調用關係:

 

①首先係統包含slf4j-api作為日誌接入的接口。compile時slf4j-api中public final class LoggerFactor類中private final static void bind()方法會尋找具體的日誌實現類綁定,主要通過StaticLoggerBinder.getSingleton()的語句調用。
②slf4j-log4j12是鏈接slf4j-api和log4j中間的適配器。它實現了slf4j-apiz中StaticLoggerBinder接口,從而使得在編譯時綁定的是slf4j-log4j12的getSingleton()方法。
③log4j是具體的日誌係統。通過slf4j-log4j12初始化Log4j,達到最終日誌的輸出。

原帖地址:https://blog.csdn.net/tengdazhang770960436/article/details/18006127

最後更新:2017-04-03 12:55:35

  上一篇:go android跨進程通信(IPC):使用AIDL
  下一篇:go WIKIOI-1576 最長不下降子序列