前兩章簡(jiǎn)單的說了下spring boot獨(dú)立成jar 的原理案怯。和spring boot的一些配置及為什么可以自動(dòng)配置的原理。而今天這篇又是一個(gè)獨(dú)立的知識(shí)點(diǎn):日志江场。
其實(shí)說起日志這個(gè)可以和Spring Boot關(guān)系不密集纺酸,哪怕我們不用Spring Boot也是要用日志的。
往小了說記錄項(xiàng)目的使用情況址否,往大了說出了問題得以調(diào)試餐蔬。這是一個(gè)必不可少的東西碎紊。所以這一章會(huì)詳細(xì)的講解一下日志及日志框架。
市場(chǎng)上常用的日志框架
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)這三個(gè)是日志門面(日志的抽象層)樊诺。
JUL(java.util.logging),Logback,Log4j,Log4j2這四個(gè)是日志的實(shí)現(xiàn)仗考。
我們?cè)谑褂玫臅r(shí)候一般會(huì)選擇一個(gè)實(shí)現(xiàn),再選擇一個(gè)門面:
下面我們一一分析:
- Jboss-logging:這個(gè)對(duì)我們普通程序員很不友好词爬,需要專門的框架秃嗜,所以暫時(shí)這個(gè)pass
- JCL(jackarta Commons Logging):這個(gè)雖然沒啥大問題,可以使用顿膨。但是這個(gè)框架最后一次更新是2014年锅锨。×滴郑看這個(gè)時(shí)間只能說一句廉頗老矣/
- slf4j(Simple Logging Facade for Java):所以三個(gè)門面只剩下這一個(gè)是適合使用的了必搞。而且有個(gè)小知識(shí):這個(gè)slf4j和logback,log4j這三個(gè)是一個(gè)人寫的囊咏。
- Log4j:寫slf4j的那個(gè)人最開始的練手作品顾画,幾乎可以說是最開始的日志工具包。
- Logback:寫log4j的大佬經(jīng)過一段時(shí)間的修煉匆笤,覺得log4j太垃圾了研侣,所以直接重新寫了一個(gè)。
- JUL(java.util.logging):這個(gè)是jdk想要自己占領(lǐng)日志市場(chǎng)的跟風(fēng)之作炮捧。
- Log4j2:就是借了個(gè)名庶诡,和log4j完全莫得關(guān)系,是阿帕奇公司開發(fā)的咆课。不管是性能還是完整性都挺好的末誓。但是因?yàn)樘昧耍院芏嗫蚣軟]適配书蚪。
分析了這么多喇澡,我們的選擇也出來了:slf4j和logback。
而我們用的框架:
Spring 框架默認(rèn)是用JCL殊校。
Spring Boot選用的是slf4j和logback晴玖。
Spring Boot中使用日志
在spring boot項(xiàng)目中,不需要導(dǎo)入額外的依賴包为流,直接就整合了slf4j了(其實(shí)spring boot中整合了好多日志框架)呕屎。
日志級(jí)別
日志本身是有級(jí)別之分的。根據(jù)日志的重要性敬察,分了五個(gè)級(jí)別秀睛,由低到高分別如下:
trace < debug < info < warn < error
我們可以調(diào)整輸出的日志級(jí)別,日志就只會(huì)在這個(gè)級(jí)別及以上更高級(jí)別的生效莲祸。如下demo:
!
正常來講這五個(gè)打印都應(yīng)該輸出蹂安,但是事實(shí)上并不是這樣椭迎,說明spring boot默認(rèn)的級(jí)別就是info.不過這個(gè)級(jí)別是可調(diào)的,如下配置:
logging.level.lsj=trace
這個(gè)配置需要注意下:level后面的是自己的包名田盈。這個(gè)配置的作用域是指定的包侠碧。
這個(gè)日志在控制臺(tái)其實(shí)看起來也不是很方便,所以日志是可以輸出到指定路徑的指定文件的缠黍。這里需要兩個(gè)配置:
logging.file=xxx.log #指定文件名弄兜,可以在這順便指定文件路徑
logging.path=/xx/xx #指定路徑。這個(gè)和上面的是沖突的瓷式。指定路徑后會(huì)自動(dòng)生成springboot默認(rèn)名稱的spring.log文件替饿。
需要注意的是上面的是spring 1.x版本的使用方法。而2.x以上這兩個(gè)配置改名字了贸典,變成了:
logging.file.name
logging.file.path
使用方法還是差不多的视卢,附上使用截圖:
其實(shí)這個(gè)還有一個(gè)好處,就是可以分天記錄日志廊驼,或者分周据过,分月都可以的。
當(dāng)然了妒挎,這個(gè)控制臺(tái)和日志文件的輸出格式也都是可以改的绳锅,在符合規(guī)定的情況下可以改成你想要的,如下兩個(gè)配置:
logging.pattern.console=
logging.pattern.file=
至于這個(gè)輸出是有一定格式的酝掩,比如:
- %d表示日期時(shí)間
- %thread表示線程名稱
- %logger{50}表示logger名字最長(zhǎng)50個(gè)字符鳞芙。否則分割
- %msg日志消息
- %n 換行符
大概就這樣吧,估計(jì)這里沒說全期虾,感興趣的自己去看文檔原朝。
這里還有個(gè)小知識(shí)點(diǎn):spring boot中的日志文件默認(rèn)會(huì)自動(dòng)分割,每到10m會(huì)往下版本遞增镶苞,比如spring1.log喳坠。到了10mb這個(gè)1就不動(dòng)了,新的寫道spring2.log茂蚓。再到10m自動(dòng)再往下
另外壕鹉,logBack也支持自定義配置文件的。自己寫個(gè)logback的xml文件煌贴,放到spring boot的類目錄下御板,spring boot會(huì)自動(dòng)讀取這個(gè)配置文件而不是默認(rèn)的配置文件锥忿。(這里對(duì)xml文件名字是有要求的牛郑。)
敲黑板!這里又有注意點(diǎn)了:
雖然我們這個(gè)圖中說明了可以起的名字有挺多的敬鬓,但是spring boot建議我們不要直接使用logback.xml而是使用logback-{prefile}.xml淹朋。之所以這樣的原因是如果我們使用logback.xml笙各。那么是日志框架直接讀取這個(gè)配置文件,繞過了spring boot础芍。但是如果是logback-{prefile}.xml杈抢。則會(huì)先由spring boot解析這個(gè)文件,而spring boot中那個(gè)很吊的注解springProfile:根據(jù)環(huán)境使用不同的配置就可以使用了仑性。當(dāng)然了惶楼,這個(gè)springProfile標(biāo)簽如果在logback.xml中出現(xiàn)會(huì)報(bào)錯(cuò)!
本篇文章就到這里诊杆,都是一些很基礎(chǔ)的知識(shí)和理論歼捐,可能看上去干貨不多,但是其實(shí)這個(gè)有助于你能看懂日志晨汹,并作出修改豹储。如果本篇文章稍微幫到你了記得點(diǎn)個(gè)喜歡點(diǎn)個(gè)關(guān)注。也祝大家工作順順利利吧淘这!