log4j:log4j1的全部內容
log4j2:
log4j-api :log4j2 定義下的apilog4j-core:log4j2 對定義的實現logback:logback-core:logback核心包logback-classic:logback實現了slf4j的apicommons-logging:commons-logging:原生的全部內容log4j-jcl:commons-logging到log4j2的橋梁jcl-over-log4j: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的橋梁備注:鏈接:官方各個jar包說明http://logging.apache.org/log4j/2.x/runtime-dependencies.html jcl全稱:Jakarta Commons Logging jul全稱:java Logging Framework
操作步驟: - 去掉log4j包 - 添加log4j-over-slf4j(橋梁),slf4j-api,logback-core,logback-classic - 添加logback的配置文件
實現原理:log4j-over-slf4j內部是簡化版的log4j(定義與log4j中基本一致,可實現無縫遷移),真正實現的時候使用slf4j-api里面的來具體實現,slf4j會自動適配真正使用哪種來實現,舉一反三,slf4j向哪種日志輸出可以自由搭配
操作步驟: - 添加jar包:jul-to-slf4j (實現jdk-logging切換到slf4j),slf4j-api,logback-core,logback-classic - 添加logback配置文件 - 在代碼中添加如下代碼 static { SLF4JBridgeHandler.install(); }
實現原理:在jul-to-slf4j里面只有1個類:SLF4JBridgeHandler,這個類集成了jdk-logging里面的java.util.logging.Handler,這個是jdk-logging處理日志中的一個處理器,在使用之前,必須提前注冊這個處理器,具體沒細研究過,初始化后這個類后slf4j的原生LoggerFactory會獲取一個定義的logger來進行日志的輸出
操作步驟: - 去掉commons-logging.jar(無所謂) - 添加:jcl-over-slf4j(實現commons-logging切換到slf4j),slf4j-api,logback-core,logback-classic - 添加logback配置文件
實現原理:commons-logging通過jcl-over-slf4j 來選擇slf4j作為底層的日志輸出對象,而slf4j又選擇logback來作為底層的日志輸出對象
項目中目前使用commons-logging,log4j1,jdk-logging 現在想統一將日志的輸出交給logback 操作步驟: - 將上述日志輸出全部切換到slf4j - - 去掉commons-logging(其實去不去都可以),使用jcl-over-slf4j將commons-logging的底層日志輸出切換到slf4j - - 去掉log4j1(必須去掉),使用log4j-over-slf4j,將log4j1的日志輸出切換到slf4j - - 使用jul-to-slf4j,將jul的日志輸出切換到slf4j - 使slf4j選擇logback來作為底層日志輸出 - - 添加slf4j-api,logback-core,logback-classic - 添加logback配置文件
項目中目前使用commons-logging,log4j進行編程現在統一切換到jdk-logging 操作步驟: - 切換到slf4j來輸出 - - 去掉commons-logging(是否去掉無影響),使用jcl-over-slf4j將commons-logging底層實現切換到slf4j - - 去掉log4j1(必須去),使用log4j-over-slf4j,將log4j1的實現切換到slf4j - 選擇真正的實現 - - 添加slf4j-api,slf4j-jdk14(集成包)
參考slf4j官網的沖突說明http://www.slf4j.org/legacy.html
內部實現原理這里不再細說,可參考文章:http://blog.csdn.net/a283398689/article/details/52776145
log4j2 >= slf4j >log4j1,具體性能如何,我沒自己測試,有興趣可以試試
log4j1:import org.apache.log4j.Logger;log4j2:import org.apache.logging.log4j.Logger;新聞熱點
疑難解答