spring boot 源碼解析(三)日誌框架及集成使用

前兩章簡單的說了下spring boot獨立成jar 的原理。和spring boot的一些配置及爲什麼可以自動配置的原理。而今天這篇又是一個獨立的知識點:日誌。
其實說起日誌這個可以和Spring Boot關係不密集,哪怕我們不用Spring Boot也是要用日誌的。
往小了說記錄項目的使用情況,往大了說出了問題得以調試。這是一個必不可少的東西。所以這一章會詳細的講解一下日誌及日誌框架。

市場上常用的日誌框架

JUL(java.util.logging),JCL(jackarta Commons Logging),Jboss-logging,Logback,Log4j,Log4j2,slf4j(Simple Logging Facade for Java)...
其中:JCL(jackarta Commons Logging),Jboss-logging,slf4j(Simple Logging Facade for Java)這三個是日誌門面(日誌的抽象層)
JUL(java.util.logging),Logback,Log4j,Log4j2這四個是日誌的實現
我們在使用的時候一般會選擇一個實現,再選擇一個門面:
下面我們一一分析:

  • Jboss-logging:這個對我們普通程序員很不友好,需要專門的框架,所以暫時這個pass
  • JCL(jackarta Commons Logging):這個雖然沒啥大問題,可以使用。但是這個框架最後一次更新是2014年。。看這個時間只能說一句廉頗老矣/
  • slf4j(Simple Logging Facade for Java):所以三個門面只剩下這一個是適合使用的了。而且有個小知識:這個slf4j和logback,log4j這三個是一個人寫的。
  • Log4j:寫slf4j的那個人最開始的練手作品,幾乎可以說是最開始的日誌工具包。
  • Logback:寫log4j的大佬經過一段時間的修煉,覺得log4j太垃圾了,所以直接重新寫了一個。
  • JUL(java.util.logging):這個是jdk想要自己佔領日誌市場的跟風之作。
  • Log4j2:就是借了個名,和log4j完全莫得關係,是阿帕奇公司開發的。不管是性能還是完整性都挺好的。但是因爲太好了,所以很多框架沒適配。

分析了這麼多,我們的選擇也出來了:slf4j和logback。
而我們用的框架:
Spring 框架默認是用JCL。
Spring Boot選用的是slf4j和logback。

Spring Boot中使用日誌

在spring boot項目中,不需要導入額外的依賴包,直接就整合了slf4j了(其實spring boot中整合了好多日誌框架)。


日誌級別
日誌本身是有級別之分的。根據日誌的重要性,分了五個級別,由低到高分別如下:
trace < debug < info < warn < error
我們可以調整輸出的日誌級別,日誌就只會在這個級別及以上更高級別的生效。如下demo:
!
正常來講這五個打印都應該輸出,但是事實上並不是這樣,說明spring boot默認的級別就是info.不過這個級別是可調的,如下配置:

logging.level.lsj=trace

這個配置需要注意下:level後面的是自己的包名。這個配置的作用域是指定的包。
這個日誌在控制檯其實看起來也不是很方便,所以日誌是可以輸出到指定路徑的指定文件的。這裏需要兩個配置:

logging.file=xxx.log #指定文件名,可以在這順便指定文件路徑
logging.path=/xx/xx #指定路徑。這個和上面的是衝突的。指定路徑後會自動生成springboot默認名稱的spring.log文件。

需要注意的是上面的是spring 1.x版本的使用方法。而2.x以上這兩個配置改名字了,變成了:

logging.file.name
logging.file.path

使用方法還是差不多的,附上使用截圖:



其實這個還有一個好處,就是可以分天記錄日誌,或者分周,分月都可以的。
當然了,這個控制檯和日誌文件的輸出格式也都是可以改的,在符合規定的情況下可以改成你想要的,如下兩個配置:

logging.pattern.console=
logging.pattern.file=


至於這個輸出是有一定格式的,比如:

  • %d表示日期時間
  • %thread表示線程名稱
  • %logger{50}表示logger名字最長50個字符。否則分割
  • %msg日誌消息
  • %n 換行符
    大概就這樣吧,估計這裏沒說全,感興趣的自己去看文檔。
    這裏還有個小知識點:spring boot中的日誌文件默認會自動分割,每到10m會往下版本遞增,比如spring1.log。到了10mb這個1就不動了,新的寫道spring2.log。再到10m自動再往下
    另外,logBack也支持自定義配置文件的。自己寫個logback的xml文件,放到spring boot的類目錄下,spring boot會自動讀取這個配置文件而不是默認的配置文件。(這裏對xml文件名字是有要求的。)

    敲黑板!這裏又有注意點了:
    雖然我們這個圖中說明了可以起的名字有挺多的,但是spring boot建議我們不要直接使用logback.xml而是使用logback-{prefile}.xml。之所以這樣的原因是如果我們使用logback.xml。那麼是日誌框架直接讀取這個配置文件,繞過了spring boot。但是如果是logback-{prefile}.xml。則會先由spring boot解析這個文件,而spring boot中那個很吊的註解springProfile:根據環境使用不同的配置就可以使用了。當然了,這個springProfile標籤如果在logback.xml中出現會報錯!

本篇文章就到這裏,都是一些很基礎的知識和理論,可能看上去幹貨不多,但是其實這個有助於你能看懂日誌,並作出修改。如果本篇文章稍微幫到你了記得點個喜歡點個關注。也祝大家工作順順利利吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章