說到日志,不得不提一下Ceki Gülcü,這個牛逼到爆的程序員十分的犀利,因為 log4j、logback,log4j2,slf4j 都是他寫的,log4j在前些年有多牛逼,這個就不用我說了(log4j之前差點成為SUN公司JDK中的一部分),現(xiàn)在logback是spring boot默認的日志框架,log4j2是目前性能最好的日志框架。Ceki 這個牛逼的程序員,真是我崇拜的大神。
slf4j又是什么呢?其實是當(dāng)時日志的框架有很多,不僅有l(wèi)og4j還有jdk-logging等其他日志框架,Ceki 覺得我怎么不再寫個抽象層,把這些日志實現(xiàn)都屏蔽?然后這個大佬,就寫了一層日志的抽象層框架,就是slf4j的起源。
各種日志包介紹
1、log4j
- log4j:log4j1的全部內(nèi)容,2012年5月更新的1.2.17為最新版,相當(dāng)多的舊系統(tǒng)現(xiàn)在依然使用。
2、logback
- logback-core:是基礎(chǔ)模塊,為日志的基礎(chǔ)。
- logback- classic:是log4j的一個 改良版本。此外logback-classic完整實現(xiàn)SLF4J API使你可以很方便地更換成其它日志系統(tǒng)如log4j或JDK14 Logging。
- logback-access:訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能。
3、log4j2
官網(wǎng):https://logging.apache.org/log4j/2.x
異步記錄器的吞吐量比Log4j 1.x和Logback高18倍(官方數(shù)據(jù)),延遲低。
- log4j-core: 核心實現(xiàn)包,日志的基礎(chǔ)
- log4j-api:是log4j的API接口,可以與log4j-core一起使用,也可以使用其他的日志實現(xiàn),例如logback實現(xiàn),相比slf4j還有其他優(yōu)點,例如:支持記錄方式不止是字符串,有更多的記錄方式等等。
- log4j-web:Web項目使用
- log4j-jcl:log4j到commons-logging的橋梁
4、JUL(java.util.logging)
Java提供了自己的日志框架,類似于Log4J,但是API并不完善,對開發(fā)者不是很友好,而且對于日志的級別分類也不是很清晰。
- jul-to-slf4j:jdk-logging到slf4j的橋梁
5、JCL(Jakarta Commons-Logging)
Jakarta Commons Logging和SLF4J非常類似,也是提供的一套API來掩蓋了真正的Logger實現(xiàn)。便于不同的Logger的實現(xiàn)的替換,而不需要重新編譯代碼。缺點在于它的查找Logger的實現(xiàn)者的算法比較復(fù)雜,而且當(dāng)出現(xiàn)了一些class loader之類的異常時,無法去修復(fù)它。
- commons-logging:commons-logging所有內(nèi)容
- commons-logging-api:commons-loggingAPI接口
- jcl-over-slf4j
6、slf4j
如果你開發(fā)的是類庫或者嵌入式組件,那么就應(yīng)該考慮采用SLF4J,因為不可能影響最終用戶選擇哪種日志系統(tǒng)。在另一方面,如果是一個簡單或者獨立的應(yīng)用,確定只有一種日志系統(tǒng),那么就沒有使用SLF4J的必要。
- slf4j-jdk14:slf4j到j(luò)dk-logging的橋梁
- slf4j-log4j12:slf4j到log4j1的橋梁
- log4j-slf4j-impl:slf4j到log4j2的橋梁
- logback-classic:slf4j到logback的橋梁
- slf4j-jcl:slf4j到commons-logging的橋梁
日志集成配置
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
2、slf4j與其他日志框架集成
1)slf4j與jdk-logging集成:
需要的jar包:
slf4j-api
slf4j-jdk14(集成包)
2)slf4j與log4j1集成:
需要的jar包:
slf4j-api
log4j
slf4j-log4j12(集成包)
3)slf4j與log4j2集成:
需要的jar包:
slf4j-api
log4j-api
log4j-core
log4j-slf4j-impl(集成包)
log4j-slf4j18-impl(集成包)
這個地方有個坑,由于SLF4J綁定的兼容性中斷,從版本2.11.1開始,提供了兩個SLF4J到Log4j適配器。
- log4j-slf4j-impl應(yīng)與SLF4J 1.7.x或更早版本一起使用。
- log4j-slf4j18-impl應(yīng)與SLF4J 1.8.x版本或更新版本一起使用。
如果需要了解詳情,請移步https://www.docs4dev.com/docs/zh/log4j2/2.x/all/log4j-slf4j-impl-index.html
4)slf4j與logback集成:
需要的jar包:
slf4j-api
logback-core
logback-classic(集成包)
5)slf4j與commons-logging集成:
需要的jar包:
slf4j-api
commons-logging
slf4j-jcl(集成包)