首頁  >  問答  >  主體

log4j - java的日志到底是怎么一回事

黄舟黄舟2713 天前490

全部回覆(3)我來回復

  • 高洛峰

    高洛峰2017-04-17 16:57:57

    首先,你需要了解一個設計模式:適配器模式。

    Java用來記錄日誌的函式庫有很多,例如有JDK自帶的Logger、Log4j、Logback,它們之間互相不相容,通常情況下,我們寫程式碼的時候選用其中一個就可以了。

    但是,如果有一天你寫的程式碼開源了,要給別人使用,那麼問題就來了,該使用哪個日誌庫?當然不能隨便選用一個了,因為你不知道使用你的開源程式庫的人用的哪個日誌框架。這時候你想無論別人使用哪個日誌框架,你都可以相容,這時候就要使用commons-logging或slf4j了。所以一般開源框架都不會使用具體的日誌框架,而是用commons-logging或slf4j處理日誌,這樣可以根據使用者使用的具體日誌框架來記錄日誌,例如Hibernate用的是slf4j(不過好像最新版本用的是JBOSS的轉接器了)、Spring用的是commons-logging。

    Java在日誌這塊不像JDBC,JDBC有一套共同的標準API,無論你連接Oracle、MySQL,API介面都是一樣的。但是日誌庫JDK Logger、Log4j、Logback是互相不相容的,沒有共同的Interface,所以commons-logging、slf4j透過適配器模式,抽像出來一個共同的接口,然後根據使用的具體日誌框架來實現日誌。

    總結一下,就是JDK Logger、Log4j、Logback是具體的日誌框架的實現,commons-logging、slf4j是解決日誌框架之間不相容而抽像出來的適配器介面。

    最後,這篇部落格是我對slf4j的原始碼解析,希望對你有幫助:http://blog.csdn.net/xiao__gui/article/details/32695647

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 16:57:57

    有的是接口,有的是實現。 slf4j是log4j的升級版,都實作commons-logging。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 16:57:57

    slf4j是一個log的facade,你可以選擇底層是使用commons-logging,log4j,logback等具體的實作。

    回覆
    0
  • 取消回覆