1. 程式人生 > >slf4j-api slf4j-log4j12以及log4j之間的關係

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

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

幾乎在每個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,達到最終日誌的輸出。

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

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述