log4j日誌組合

commons-logging apache最初的日誌門面,目的是在開發組件時不強依賴日誌實現,給調用者以選擇。
jcl-over-slf4j slf4j開發的爲了兼容前者的適配,裏面的內容和前者基本一致,引用時和前者互斥。
slf4j-api   slf4j的主api,作爲獨立的日誌門面。
slf4j-log4j slf4j對log4j的適配,要和log4j包一起引用
log4j log4j實現
logback-classic logback實現。
 
引用關係:
目前項目中的log4j引用比較混亂。可用的依賴和使用方式由如下那麼幾種:

1. log4j-1.2.16.jar
不使用框架,僅使用實現。項目中不常使用
使用Logger.getLogger()
 

2.commons-logging + log4j
簡單門面+實現
使用
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
private static final Log logger = LogFactory.getLog(CourseCenterUnitTestBase.class);

3. jcl-over-slf4j + slf4j-api + slf4j-log4j + log4j
slf4j門面+log4j實現。
官方解釋是這個組合,解釋爲jcl-over-slf4j的作用是把apache的門面嫁接到slf4j的門面。我測試了一下,實際上commons-logging + slf4j-api + slf4j-log4j + log4j  貌似也行得通。
使用
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(CourseCenterUnitTestBase.class);
 

4.jcl-over-slf4j + slf4j-api + logback-classic
slf4j門面+logback實現。沒使用過,相信網上一大堆。

--------------

#2各種jar包總結

  • log4j1:

    • log4j:log4j1的全部內容
  • log4j2:

    • log4j-api:log4j2定義的API
    • log4j-core:log4j2上述API的實現
  • logback:

    • logback-core:logback的核心包
    • logback-classic:logback實現了slf4j的API
  • commons-logging:

    • commons-logging:commons-logging的原生全部內容
    • log4j-jcl:commons-logging到log4j2的橋樑
    • jcl-over-slf4j:commons-logging到slf4j的橋樑
  • slf4j轉向某個實際的日誌框架:

    場景介紹:如 使用slf4j的API進行編程,底層想使用log4j1來進行實際的日誌輸出,這就是slf4j-log4j12乾的事。

    • slf4j-jdk14:slf4j到jdk-logging的橋樑
    • slf4j-log4j12:slf4j到log4j1的橋樑
    • log4j-slf4j-impl:slf4j到log4j2的橋樑
    • logback-classic:slf4j到logback的橋樑
    • slf4j-jcl:slf4j到commons-logging的橋樑
  • 某個實際的日誌框架轉向slf4j:

    場景介紹:如 使用log4j1的API進行編程,但是想最終通過logback來進行輸出,所以就需要先將log4j1的日誌輸出轉交給slf4j來輸出,slf4j再交給logback來輸出。將log4j1的輸出轉給slf4j,這就是log4j-over-slf4j做的事

    這一部分主要用來進行實際的日誌框架之間的切換(下文會詳細講解)

    • jul-to-slf4j:jdk-logging到slf4j的橋樑
    • log4j-over-slf4j:log4j1到slf4j的橋樑
    • jcl-over-slf4j:commons-logging到slf4j的橋樑

#3集成總結

##3.1 commons-logging與其他日誌框架集成

  • 1 commons-logging與jdk-logging集成:

    需要的jar包:

    • commons-logging
  • 2 commons-logging與log4j1集成:

    需要的jar包:

    • commons-logging
    • log4j
  • 3 commons-logging與log4j2集成:

    需要的jar包:

    • commons-logging
    • log4j-api
    • log4j-core
    • log4j-jcl(集成包)
  • 4 commons-logging與logback集成:

    需要的jar包:

    • logback-core
    • logback-classic
    • slf4j-api、jcl-over-slf4j(2個集成包,可以不再需要commons-logging)
  • 5 commons-logging與slf4j集成:

    需要的jar包:

    • jcl-over-slf4j(集成包,不再需要commons-logging)
    • slf4j-api

##3.2 slf4j與其他日誌框架集成

  • slf4j與jdk-logging集成:

    需要的jar包:

    • slf4j-api
    • slf4j-jdk14(集成包)
  • slf4j與log4j1集成:

    需要的jar包:

    • slf4j-api
    • log4j
    • slf4j-log4j12(集成包)
  • slf4j與log4j2集成:

    需要的jar包:

    • slf4j-api
    • log4j-api
    • log4j-core
    • log4j-slf4j-impl(集成包)
  • slf4j與logback集成:

    需要的jar包:

    • slf4j-api
    • logback-core
    • logback-classic(集成包)
  • slf4j與commons-logging集成:

    需要的jar包:

    • slf4j-api
    • commons-logging
    • slf4j-jcl(集成包)

#4 日誌系統之間的切換


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章