一观蓄、本文說明
因?yàn)閘ogback其他配置尚好理解混移,本文只說明比較少用,但是卻起關(guān)鍵作用的兩個(gè)子節(jié)點(diǎn)侮穿。
二歌径、基礎(chǔ)教學(xué)
1、依賴:
實(shí)際開發(fā)中我們不需要直接添加該依賴亲茅,你會(huì)發(fā)現(xiàn)spring-boot-starter其中包含了 spring-boot-starter-logging回铛,Spring Boot為我們提供了很多默認(rèn)的日志配置,所以克锣,只要將spring-boot-starter-logging作為依賴加入到當(dāng)前應(yīng)用的classpath茵肃,則“開箱即用”。
2袭祟、日記的等級(jí)
日志級(jí)別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL
3验残、配置
這里對(duì)日志框架的支持有兩種配置方式,一般來講我們倘若不是要較復(fù)雜的需求榕酒,可以直接在?application.yml?配置文件配置下即可:
application.properties 或 ?application.yml?(系統(tǒng)層面)
參考網(wǎng)站:https://www.cnblogs.com/nuccch/p/6221255.html
logback-spring.xml ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (自定義文件方式)
參考網(wǎng)站:http://tengj.top/2017/04/05/springboot7/
4胚膊、彩色打印
參考:https://my.oschina.net/360yg/blog/1810625
5、@Slf4j注解
安裝lombok插件想鹰,在需要打印的類名上加上該注解即可
替代下面語句的編寫
private Loggerlogger = LoggerFactory.getLogger(this.getClass());
6紊婉、打印不出json的問題
不是打印不出而是正確的要加一個(gè)占位符 {},如下
log.info("hospital{}", JSON.toJSONString(hospitalEntity2));
7辑舷、log存放文件路徑定義
三喻犁、特別注意的兩個(gè)配置<root>、<loger>
最關(guān)鍵的兩個(gè)節(jié)點(diǎn)何缓,你可以理解之前的property肢础、appender嵌套property只是一些定義好的變量,真正定義方法怎么去運(yùn)用這些變量是這兩個(gè)節(jié)點(diǎn)所要做的碌廓。
1传轰、子節(jié)點(diǎn)--<root>
root節(jié)點(diǎn)是必選節(jié)點(diǎn),用來指定最基礎(chǔ)的日志輸出級(jí)別谷婆,只有一個(gè)level屬性慨蛙,不區(qū)分大小寫辽聊,默認(rèn)是DEBUG。
可以包含零個(gè)或多個(gè)元素期贫,標(biāo)識(shí)這個(gè)appender將會(huì)添加到這個(gè)loger(理解root為一個(gè)全局的loger)跟匆。
舉例子:
上圖這是我定義好的文件輸出的appender節(jié)點(diǎn),對(duì)應(yīng)下圖的<appender-ref>節(jié)點(diǎn)通砍,ref對(duì)應(yīng)<appender>的name屬性玛臂,上面說到<root>節(jié)點(diǎn)好比一個(gè)方法,所以現(xiàn)在這個(gè)方法的意思是全局打印等級(jí)為INFO封孙,而且四個(gè)<appender>變量都執(zhí)行迹冤,即正常的控制臺(tái)輸出和warn、info敛瓷、error的三個(gè)文件輸出叁巨,可以到對(duì)應(yīng)的控制臺(tái)和日志文件里面看到的確有日志斑匪。反之倘若我們level定為Debug呐籽,或者去除name為“WARN”的<appender>則是輸出Debug以上等級(jí)的日志,WARN.log日志文件也不會(huì)再有日志打印進(jìn)去蚀瘸。
2狡蝶、子節(jié)點(diǎn)--<loger>
<loger>用來設(shè)置某一個(gè)包或者具體的某一個(gè)類的日志打印級(jí)別、以及指定<appender>贮勃,也就是只管轄指定的區(qū)域的日志輸出規(guī)則贪惹。<loger>僅有一個(gè)name屬性,一個(gè)可選的level和一個(gè)可選的addtivity屬性寂嘉。
注意:這里說的上級(jí)就是root節(jié)點(diǎn)
name:用來指定受此loger約束的某一個(gè)包或者具體的某一個(gè)類奏瞬。
level:用來設(shè)置打印級(jí)別,大小寫無關(guān):TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF泉孩,還有一個(gè)特俗值INHERITED或者同義詞NULL硼端,代表強(qiáng)制執(zhí)行上級(jí)的級(jí)別。如果未設(shè)置此屬性寓搬,那么當(dāng)前l(fā)oger將會(huì)繼承上級(jí)的級(jí)別珍昨。
addtivity:是否向上級(jí)loger傳遞打印信息。默認(rèn)是true句喷。
舉例子:
<logger name="com.dudu.controller.LearnController" level="WARN" additivity="false">
????????<appender-ref ref="console"/>
</logger>
控制com.dudu.controller.LearnController類的日志打印镣典,打印級(jí)別為“WARN”;
additivity屬性為false,表示此loger的打印信息不再向上級(jí)傳遞;
指定了名字為“console”的appender;
這時(shí)候執(zhí)行com.dudu.controller.LearnController類的login方法時(shí)唾琼,先執(zhí)行<logger name="com.dudu.controller.LearnController" level="WARN" additivity="false">,
將級(jí)別為“WARN”及大于“WARN”的日志信息交給此loger指定的名為“console”的appender處理兄春,在控制臺(tái)中打出日志,不再向上級(jí)root傳遞打印信息锡溯。
注意:
當(dāng)然如果你把a(bǔ)dditivity=”false”改成additivity=”true”的話赶舆,就會(huì)打印兩次肴裙,因?yàn)榇蛴⌒畔⑾蛏霞?jí)傳遞,logger本身打印一次涌乳,root接到后又打印一次蜻懦。
四、配合多環(huán)境
據(jù)不同環(huán)境(prod:生產(chǎn)環(huán)境夕晓,test:測試環(huán)境宛乃,dev:開發(fā)環(huán)境)來定義不同的日志輸出,在 logback-spring.xml中使用 springProfile 節(jié)點(diǎn)來定義蒸辆,方法如下:
文件名稱不是logback.xml征炼,想使用spring擴(kuò)展profile支持,要以logback-spring.xml命名
可以啟動(dòng)服務(wù)的時(shí)候指定 profile (如不指定使用默認(rèn))躬贡,如指定prod 的方式為:
java -jar xxx.jar –spring.profiles.active=prod
關(guān)于多環(huán)境配置可以參考