JAVA日志發(fā)展史,終于了解了...
點擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”
優(yōu)質(zhì)文章,第一時間送達

-? ? ?第一階段??? -
2001年以前,Java是沒有日志庫的,打印日志全憑System.out和System.err
缺點:
產(chǎn)生大量的IO操作同時在生產(chǎn)環(huán)境中無法合理的控制是否需要輸出
輸出的內(nèi)容不能保存到文件
只打印在控制臺,打印完就過去了,也就是說除非你一直盯著程序跑
無法定制化,且日志粒度不夠細(xì)

-? ? ?第二階段??? -
2001年,一個ceki Gulcü的大佬搞了一個日志框架 log4j后來( log4j成為Apache項目,Ceki加入Apache組織
Apache還曾經(jīng)建議Sun引入Log4j到Java的標(biāo)準(zhǔn)庫中,但Sun拒絕了.


-? ? ?第三階段??? -
sun有自己的小心思,2002年2月JDK1.4發(fā)布,Sun推出了自己的日志標(biāo)準(zhǔn)庫JUL(Java Util Logging),其實是照著Log4j抄的,而且還沒抄好,還是在JDK1.5以后性能和可用性才有所提升。由于Log4j比JUL好用,并且成熟,所以Log4j在選擇上占據(jù)了一定的優(yōu)勢。

-? ? ?第四階段??? -
2002年8月Apache推出了JCL(Jakarta Commons Logging),也就是日志抽象層,支持運行時動態(tài)加載日志組件的實現(xiàn),當(dāng)然也提供一個默認(rèn)實現(xiàn)Simple Log(在 ClassLoader 中進行查找,如果能找到Log4j則默認(rèn)使用llog4j實現(xiàn),如果沒有則使用JUL實現(xiàn),再沒有則使用JCL內(nèi)部提供的 Simple Log實現(xiàn))。

但是JUL有三個缺點:
1.效率較低。
2.容易引發(fā)混亂。
3.使用了自定義ClassLoader的程序中,使用JCL會引發(fā)內(nèi)存泄露。

-? ? ?第五階段??? -
2006年巨佬Ceki( Log4j的作者)因為一些原因離開了Apache組織,之后Ceki覺得JCL不好用,自己攙了一套新的日志標(biāo)準(zhǔn)接口規(guī)范Slf4j (Simple Logging Facacfor Java),也可以稱為日志門面,很明顯Slf4j是對標(biāo)JCL,后面也證明了Slf4j比JCL更優(yōu)秀。
巨佬Ceki提供了一系列的橋接包來幫助Slf4j接口與其他日志庫建立關(guān)系,這種方式稱橋接設(shè)計模式。
代碼使用Slf4j接口,就可以實現(xiàn)日志的統(tǒng)一標(biāo)準(zhǔn)化,后續(xù)如果想要更換日志實現(xiàn),只需引入Slf4j與相關(guān)的橋接包,再引入具體的日志標(biāo)準(zhǔn)庫即可。

-? ? ?第六階段??? -
Ceki巨佬覺得市場上的日志標(biāo)準(zhǔn)庫都是間接實現(xiàn)Slf4j接口,也就是說每次都需要配合橋接包,因此在2006年,Ceki巨佬基于Slf4j接口寫出了Logback日志標(biāo)準(zhǔn)庫,做為Slf4j接口的默認(rèn)實現(xiàn),Logback 也十分給力,在功能完整度和性能上超越了所有已有的日志標(biāo)準(zhǔn)庫。
根本原因還在于,隨著用戶體量的提升,Log4j無法滿足高性能的要求,成為應(yīng)用的性能瓶頸
目前Java日志體系關(guān)系圖如下
通過SLF4j橋接到具體的日志框架實現(xiàn)

通過其他日志框架橋接到slf4j


-? ? ?第七階段??? -
2012年,Apache直接推出新項目Log4j2(不兼容Log4j) , Log4j2全面借鑒Slf4j+Logback 。
Log4j2不僅僅具有Logback的所有特性,還做了分離設(shè)計,分為log4j-api和log4j-core,log4j-api是日志接口,log4j-core是日志標(biāo)準(zhǔn)庫,并且Apache也為Log4j2提供了各種橋接包。
而且log4j2 的性能提升很大,而且支持異步日志打印。增加很多新的特性。

? 作者?|??一懶眾衫小QAQ
來源 |??cnblogs.com/simple-flw/p/15680745.html
加鋒哥微信:?java1239?? 圍觀鋒哥朋友圈,每天推送Java干貨!

