當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
SpringBoot_日志-日志框架分类和选择
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot_日志-日志框架分类和选择
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
SpringBoot與日志,說(shuō)這個(gè)日志之前呢,我們先說(shuō)一個(gè)小小的故事,來(lái)給大家介紹一下日志的起源,與日志框架的關(guān)系,如果說(shuō)對(duì)這一塊比較清楚了,那你就可以跳過(guò)我這個(gè)精彩的故事了,假設(shè)現(xiàn)在有一個(gè)開發(fā)人員,小張是一個(gè)每天加班的開發(fā)人員,然后他要開發(fā)一個(gè)比較大型系統(tǒng),開發(fā)一個(gè)大型系統(tǒng),因?yàn)檫@個(gè)系統(tǒng)有點(diǎn)大,每次為了調(diào)試和測(cè)試方便,都是喜歡System.out.println,關(guān)鍵數(shù)據(jù)在控制臺(tái)打印了一下,講關(guān)鍵數(shù)據(jù)打印在控制臺(tái),然后有一天項(xiàng)目開發(fā)完了,老板說(shuō)你這個(gè)system.out是不是有點(diǎn)太多了,你給我去掉吧,老板想要去掉他,小張一行一行給他注釋掉,然后剛注釋完老板又說(shuō),我覺得你這個(gè)輸出的還不錯(cuò),輸出了解項(xiàng)目的運(yùn)行狀況,那我們又打開,輸出既然不錯(cuò),那不如給我寫到一個(gè)文件里面,也方便我后來(lái)監(jiān)控一下,小張又得改記錄的代碼了,這么麻煩我自己來(lái)寫一個(gè)框架,記錄系統(tǒng)的一些信息,運(yùn)行時(shí)的一些信息,那么這個(gè)時(shí)候日志框架小張就寫出來(lái)了,小張高高興興的寫了一個(gè)日志框架,叫zhanglogging,這個(gè)日志框架表現(xiàn)的還不錯(cuò),以后都要用這個(gè)日志框架了,他對(duì)這個(gè)日志框架很滿足,結(jié)果隨著時(shí)代在進(jìn)步,他覺得這個(gè)框架是不是有點(diǎn)簡(jiǎn)陋啊,他突然想到了高達(dá)上的功能,他想在日志輸出的時(shí)候,他想出了幾個(gè)高達(dá)上的功能,比如以前日志記錄的時(shí)候,不管怎么輸出,他都是阻塞的,啟用異步模式,異步記錄和搜集日志,包括想要自動(dòng)歸檔,比如每天的日志我都給你壓縮起來(lái),我放到一個(gè)文件里邊,,每天要自動(dòng)歸檔,他想到了一大堆,天馬行空的功能,然后你還別說(shuō),小張這個(gè)技術(shù)還是很厲害,然后他把這個(gè)功能還給實(shí)現(xiàn)出來(lái)了,他叫zhanglogging-good.jar,這個(gè)框架還真的不錯(cuò),只不過(guò)小張的問題又來(lái)了,什么問題呢,他寫了一個(gè)新的日志框架,里面的API和設(shè)計(jì)可能和以前已經(jīng)不一樣了,那怎么辦啊,把以前的框架卸下,換上新的框架,他還要重新修改API,修改之前相關(guān)的API,部分API可能有了變動(dòng),他要修改這個(gè),那我寫了一個(gè)xiaozhang-good.jar,哪一天good也不行了,zhanglogging-perfect.jar,一個(gè)完美的日志框架,那我每次需要做這個(gè)事,要改代碼是不是有點(diǎn)麻煩,想到JDBC跟驅(qū)動(dòng)有關(guān)系,我們現(xiàn)在來(lái)寫數(shù)據(jù)庫(kù),都面向接口編程,我們只需要把數(shù)據(jù)庫(kù)的實(shí)現(xiàn)放進(jìn)去就行了,這就是我們數(shù)據(jù)庫(kù)的驅(qū)動(dòng),那我們的日志框架為什么不這么設(shè)計(jì)呢,寫了一個(gè)統(tǒng)一的接口層,我們暫且就叫做日志門面,也就是我們?nèi)罩镜某橄髮?大家不管用什么日志框架,你都用我這個(gè)日志抽象層,logging-abstract,我們這里有一個(gè)抽象層的jar包,以后我們進(jìn)行編碼的時(shí)候,我們只面向他來(lái)進(jìn)行編程,調(diào)他里面的代碼,而要用到哪個(gè)日志,小張的good還是perfect,可以給項(xiàng)目中導(dǎo)入具體的日志實(shí)現(xiàn),小張覺得這種確實(shí)是比較好了,我們來(lái)面向統(tǒng)一接口層來(lái)開發(fā),你要用什么,就用實(shí)現(xiàn)就可以了,我們這些jar包都是來(lái)實(shí)現(xiàn)他的,我們之前的日志框架都是實(shí)現(xiàn)的抽象層
介紹市面上的日志框架,大大小小非常多,我們來(lái)列舉下非常常見的,什么JUL,JCL,Jboss-logging,logback,log4j,log4j2,slf4j,等等等等一大堆,但是他們是比較常用的,到底這么多框架我們要用哪些,該怎么用呢,我們先來(lái)捋一下他的關(guān)系,他們關(guān)系是這個(gè)樣子的
我們這邊是我們的日志門面,日志門面就是我們說(shuō)的日志抽象層,我們右邊是日志的實(shí)現(xiàn),那么按照理所應(yīng)當(dāng),我們就是要在左邊選一個(gè)門面,也就是抽象層,左邊選一個(gè)接口,右邊來(lái)選一個(gè)實(shí)現(xiàn),哪些是門面呢,JCL就叫做Jakarta Commons Logging,給我們Commons-logging這個(gè)jar包,我們Spring框架也一直在用,為什么叫JCL,就是因?yàn)樗荍akarta小組來(lái)開發(fā)的,Apache下的一個(gè)小組,還有一個(gè)叫slf4j,叫Simple Logging Facade for Java,還有一個(gè)叫Jboss-logging,這三個(gè)都是日志門面,比如我們LOG4J,包括JUL,java util工具包里面帶的日志,包括Log4j2,Log4j的一個(gè)重大升級(jí),還有Logback,這個(gè)都是日志實(shí)現(xiàn),按照我們這個(gè)想法,從左邊抽一個(gè),右邊抽一個(gè),我們不知道抽哪個(gè),我們用排除法,從左邊來(lái),那要從左邊來(lái)的話,我先來(lái)排除jboss-logging,我們用的場(chǎng)景是在是太少了,生來(lái)就不是給我們普通的程序員來(lái)用的,Jboss-logging一直都是特定的框架,我們來(lái)看JCL,JCL我們也刪掉,為什么我們不用他,JCL最后一次更新是2014年,只能賜他廉頗老矣,那么理所應(yīng)當(dāng)就要選擇slf4j了,日志門面,我來(lái)選了SLF4J,而我們這個(gè)日志實(shí)現(xiàn),我們來(lái)說(shuō)一下,Log4j和Logback,都是同一個(gè)人寫的,Log4J當(dāng)時(shí)寫出來(lái)很不錯(cuò)的,只不過(guò)Log4j有性能問題,然后對(duì)log4j要進(jìn)行升級(jí)了,但是他覺得對(duì)log4j升級(jí)改動(dòng)太大了,他就重新寫了一個(gè)框架,叫Logback,他又要新寫框架了,就和小張一樣,我未來(lái)要有更多的日志框架,咋辦呢,他又寫了一個(gè)日志門面叫做SLF4J,所以這三個(gè)框架,log4j,logback,slf4j,都是出自同一個(gè)人之手,如果我選擇SLF4J,理所應(yīng)當(dāng)就應(yīng)該選擇log4j或者logback,畢竟出自同一個(gè)人之手,適配性肯定是最高的,所以我說(shuō)一下為啥不選其他呢,log4j沒有l(wèi)ogback先進(jìn),所以我不要她了,而JUL,這是JAVA util工具包自帶的logging,他為啥要自帶這個(gè)呢,因?yàn)閘og4j一出來(lái)以后,他害怕日志市場(chǎng)被別人占用了,勉強(qiáng)的來(lái)加一個(gè)日志,所以我們肯定也不用他,然后log4j2呢,他其實(shí)是借了log4j之名,是我們Apache重新來(lái)做的一個(gè)日志框架,整個(gè)日志框架設(shè)計(jì)的也非常好,但是就由于太好了,現(xiàn)在好多框架還沒有適配起來(lái),還沒有用起來(lái),所以我們最終選擇logback,這是我們的一個(gè)選擇,日志門面,日志實(shí)現(xiàn),那么Spring boot是怎么做的呢,因?yàn)樗牡讓邮莝pring框架,Spring框架默認(rèn)使用的是JCL,就是commons-logging,以前我們導(dǎo)Spring框架都要導(dǎo)入commons-logging,不導(dǎo)就不行了,他默認(rèn)使用的是這個(gè),而Springboot對(duì)他們進(jìn)行了一個(gè)包裝,springboot選用的也是slf4j和logback,springboot和我們一樣機(jī)制,這就是我們最終的選擇和springboot的選擇
?
總結(jié)
以上是生活随笔為你收集整理的SpringBoot_日志-日志框架分类和选择的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot_配置-@Condi
- 下一篇: SpringBoot_日志-slf4j使