Java日志系統(tǒng)的知識(shí)點(diǎn)有哪些-創(chuàng)新互聯(lián)

這篇文章主要介紹“Java日志系統(tǒng)的知識(shí)點(diǎn)有哪些”,在日常操作中,相信很多人在Java日志系統(tǒng)的知識(shí)點(diǎn)有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java日志系統(tǒng)的知識(shí)點(diǎn)有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、青島ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的青島網(wǎng)站制作公司

一、日志框架的分類(lèi)

  • 門(mén)面型日志框架:

  1. JCL:  Apache基金會(huì)所屬的項(xiàng)目,是一套Java日志接口,之前叫Jakarta Commons Logging,后更名為Commons Logging

  2. SLF4J:  是一套簡(jiǎn)易Java日志門(mén)面,本身并無(wú)日志的實(shí)現(xiàn)。(Simple Logging Facade for Java,縮寫(xiě)Slf4j)

  • 記錄型日志框架:

  1. JUL:  JDK中的日志記錄工具,也常稱(chēng)為JDKLog、jdk-logging,自Java1.4以來(lái)的官方日志實(shí)現(xiàn)。

  2. Log4j:  一個(gè)具體的日志實(shí)現(xiàn)框架。

  3. Log4j2:   一個(gè)具體的日志實(shí)現(xiàn)框架,是LOG4J1的下一個(gè)版本,與Log4j 1發(fā)生了很大的變化,Log4j 2不兼容Log4j 1。

  4. Logback:一個(gè)具體的日志實(shí)現(xiàn)框架,和Slf4j是同一個(gè)作者,但其性能更好。

              Java日志系統(tǒng)的知識(shí)點(diǎn)有哪些

二、發(fā)展歷程

要搞清楚它們的關(guān)系,就要從它們是在什么情況下產(chǎn)生的說(shuō)起。我們按照時(shí)間的先后順序來(lái)介紹。

Log4j

在JDK 1.3及以前,Java打日志依賴(lài)System.out.println(), System.err.println()或者e.printStackTrace(),Debug日志被寫(xiě)到STDOUT流,錯(cuò)誤日志被寫(xiě)到STDERR流。這樣打日志有一個(gè)非常大的缺陷,即無(wú)法定制化,且日志粒度不夠細(xì)。
于是, Gülcü 于2001年發(fā)布了Log4j,后來(lái)成為Apache 基金會(huì)的頂級(jí)項(xiàng)目。Log4j 在設(shè)計(jì)上非常優(yōu)秀,對(duì)后續(xù)的 Java Log 框架有長(zhǎng)久而深遠(yuǎn)的影響,它定義的Logger、Appender、Level等概念如今已經(jīng)被廣泛使用。Log4j 的短板在于性能,在Logback 和 Log4j2 出來(lái)之后,Log4j的使用也減少了。

J.U.L

受Logj啟發(fā),Sun在Java1.4版本中引入了java.util.logging,但是j.u.l功能遠(yuǎn)不如log4j完善,開(kāi)發(fā)者需要自己編寫(xiě)Appenders(Sun稱(chēng)之為Handlers),且只有兩個(gè)Handlers可用(Console和File),j.u.l在Java1.5以后性能和可用性才有所提升。

JCL(commons-logging)

由于項(xiàng)目的日志打印必然選擇兩個(gè)框架中至少一個(gè),這時(shí)候,Apache的JCL(commons-logging)誕生了。JCL 是一個(gè)Log Facade,只提供 Log API,不提供實(shí)現(xiàn),然后有 Adapter 來(lái)使用 Log4j 或者 JUL 作為L(zhǎng)og Implementation。
在程序中日志創(chuàng)建和記錄都是用JCL中的接口,在真正運(yùn)行時(shí),會(huì)看當(dāng)前ClassPath中有什么實(shí)現(xiàn),如果有Log4j 就是用 Log4j, 如果啥都沒(méi)有就是用 JDK 的 JUL。
這樣,在你的項(xiàng)目中,還有第三方的項(xiàng)目中,大家記錄日志都使用 JCL 的接口,然后最終運(yùn)行程序時(shí),可以按照自己的需求(或者喜好)來(lái)選擇使用合適的Log Implementation。如果用Log4j, 就添加 Log4j 的jar包進(jìn)去,然后寫(xiě)一個(gè) Log4j 的配置文件;如果喜歡用JUL,就只需要寫(xiě)個(gè) JUL 的配置文件。如果有其他的新的日志庫(kù)出現(xiàn),也只需要它提供一個(gè)Adapter,運(yùn)行的時(shí)候把這個(gè)日志庫(kù)的 jar 包加進(jìn)去。
不過(guò),commons-logging對(duì)Log4j和j.u.l的配置問(wèn)題兼容的并不好,使用commons-loggings還可能會(huì)遇到類(lèi)加載問(wèn)題,導(dǎo)致NoClassDefFoundError的錯(cuò)誤出現(xiàn)。

                        Java日志系統(tǒng)的知識(shí)點(diǎn)有哪些

到這個(gè)時(shí)候一切看起來(lái)都很簡(jiǎn)單,很美好。接口和實(shí)現(xiàn)做了良好的分離,在統(tǒng)一的JCL之下,不改變?nèi)魏未a,就可以通過(guò)配置就換用功能更強(qiáng)大,或者性能更好的日志庫(kù)實(shí)現(xiàn)。

這種簡(jiǎn)單美好一直持續(xù)到SLF4J出現(xiàn)。

SLF4J & Logback

SLF4J(Simple Logging Facade for Java)和 Logback 也是Gülcü 創(chuàng)立的項(xiàng)目,目的是為了提供更高性能的實(shí)現(xiàn)。
從設(shè)計(jì)模式的角度說(shuō),SLF4J 是用來(lái)在log和代碼層之間起到門(mén)面作用,類(lèi)似于 JCL 的 Log Facade。對(duì)于用戶(hù)來(lái)說(shuō)只要使用SLF4J提供的接口,即可隱藏日志的具體實(shí)現(xiàn),SLF4J提供的核心API是一些接口和一個(gè)LoggerFactory的工廠(chǎng)類(lèi),用戶(hù)只需按照它提供的統(tǒng)一紀(jì)錄日志接口,最終日志的格式、紀(jì)錄級(jí)別、輸出方式等可通過(guò)具體日志系統(tǒng)的配置來(lái)實(shí)現(xiàn),因此可以靈活的切換日志系統(tǒng)。

Logback是log4j的升級(jí)版,當(dāng)前分為三個(gè)目標(biāo)模塊:

  • logback-core:核心模塊,是其它兩個(gè)模塊的基礎(chǔ)模塊

  • logback-classic:是log4j的一個(gè)改良版本,同時(shí)完整實(shí)現(xiàn) SLF4J API 使你可以很方便地更換成其它日記系統(tǒng)如log4j 或 JDK14 Logging

  • logback-access:訪(fǎng)問(wèn)模塊與Servlet容器集成提供通過(guò)Http來(lái)訪(fǎng)問(wèn)日記的功能,是logback不可或缺的組成部分

Logback相較于log4j有更多的優(yōu)點(diǎn):

  • 更快的執(zhí)行速度

  • 更充分的測(cè)試

  • logback-classic 非常自然的實(shí)現(xiàn)了SLF4J

  • 使用XML配置文件或者Groovy

  • 自動(dòng)重新載入配置文件

  • 優(yōu)雅地從I/O錯(cuò)誤中恢復(fù)

  • 自動(dòng)清除舊的日志歸檔文件

  • 自動(dòng)壓縮歸檔日志文件

  • 謹(jǐn)慎模式

  • Lilith

  • 配置文件中的條件處理

  • 更豐富的過(guò)濾

更詳細(xì)的解釋參見(jiàn)官網(wǎng): https://logback.qos.ch/reasonsToSwitch.html

到這里,你可能會(huì)問(wèn):Apache 已經(jīng)有了個(gè)JCL,用來(lái)做各種Log lib統(tǒng)一的接口,如果 Gülcü 要搞一個(gè)更好的 Log 實(shí)現(xiàn)的話(huà),直接寫(xiě)一個(gè)實(shí)現(xiàn)就好了,為啥還要搞一個(gè)和SLF4J呢?

原因是Gülcü 認(rèn)為 JCL 的 API 設(shè)計(jì)得不好,容易讓使用者寫(xiě)出性能有問(wèn)題的代碼。關(guān)于這點(diǎn),你可以參考這篇文章獲得更詳細(xì)的介紹: https://zhuanlan.zhihu.com/p/24272450

現(xiàn)在事情就變復(fù)雜了。我們有了兩個(gè)流行的 Log Facade,以及三個(gè)流行的 Log Implementation。Gülcü 是個(gè)追求完美的人,他決定讓這些Log之間都能夠方便的互相替換,所以做了各種 Adapter 和 Bridge 來(lái)連接:

              Java日志系統(tǒng)的知識(shí)點(diǎn)有哪些

可以看到甚至 Log4j 和 JUL 都可以橋接到SLF4J,再通過(guò) SLF4J 適配到到 Logback!需要注意的是不能有循環(huán)的橋接,比如下面這些依賴(lài)就不能同時(shí)存在:

  • jcl-over-slf4j 和 slf4j-jcl

  • log4j-over-slf4j 和 slf4j-log4j12

  • jul-to-slf4j 和 slf4j-jdk14

然而,事情在變得更麻煩!

Log4j2

現(xiàn)在有了更好的 SLF4J 和 Logback,慢慢取代JCL 和 Log4j ,事情到這里總該大統(tǒng)一圓滿(mǎn)結(jié)束了吧。然而維護(hù) Log4j 的人不這樣想,他們不想坐視用戶(hù)一點(diǎn)點(diǎn)被 SLF4J / Logback 蠶食,繼而搞出了 Log4j2。

Log4j2 和 Log4j1.x 并不兼容,設(shè)計(jì)上很大程度上模仿了 SLF4J/Logback,性能上也獲得了很大的提升。Log4j2 也做了 Facade/Implementation 分離的設(shè)計(jì),分成了 log4j-api 和 log4j-core。

現(xiàn)在好了,我們有了三個(gè)流行的Log 接口和四個(gè)流行的Log實(shí)現(xiàn),如果畫(huà)出橋接關(guān)系的圖來(lái)回事什么樣子呢?

            Java日志系統(tǒng)的知識(shí)點(diǎn)有哪些

到此,關(guān)于“Java日志系統(tǒng)的知識(shí)點(diǎn)有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

網(wǎng)站標(biāo)題:Java日志系統(tǒng)的知識(shí)點(diǎn)有哪些-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://muchs.cn/article12/diecgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)品牌網(wǎng)站設(shè)計(jì)、商城網(wǎng)站搜索引擎優(yōu)化、域名注冊(cè)定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化