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