Spring Boot 學(xué)習(xí)筆記(5):日志配置

官方文檔

Spring Boot使用Commons Logging進(jìn)行所有內(nèi)部日志記錄,但保留底層日志實(shí)現(xiàn)燎潮。為Java Util Logging喻鳄,Log4J2和 Logback提供了默認(rèn)配置 。在不同情況下确封,記錄器都預(yù)先配置為使用控制臺輸出除呵,并且還提供可選的文件輸出。

默認(rèn)情況下爪喘,如果使用“Starters”颜曾,則使用Logback進(jìn)行日志記錄。還包括適當(dāng)?shù)腖ogback路由秉剑,以確保使用Java Util Logging泛豪,Commons Logging,Log4J或SLF4J的依賴庫都能正常工作。

日志格式

Spring Boot的默認(rèn)日志輸出類似于以下示例:

2014-03-05 10:57:51.112 INFO 45469 --- [main] org.apache.catalina.core.StandardEngine:啟動(dòng)Servlet引擎:Apache Tomcat / 7.0.52 
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] oaccC [Tomcat]诡曙。[localhost]吕粹。[/]:初始化Spring embedded WebApplicationContext 
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] osweb .context.ContextLoader:Root WebApplicationContext:初始化完成時(shí)間為1358 ms 
2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] osbceServletRegistrationBean:映射servlet:'dispatcherServlet'到[/] 
2014-03 -05 10:57:51.702 INFO 45469 --- [ost-startStop-1] osbcembedded.FilterRegistrationBean:映射過濾器:'hiddenHttpMethodFilter'為:[/ *]

Logback是沒有FATAL級別的日志,它將被映射到ERROR

  • 時(shí)間日期:精確到毫秒,可以用于排序
  • 日志級別:ERROR岗仑、WARN匹耕、INFO、DEBUG荠雕、TRACE
  • 進(jìn)程ID
  • 分隔符:采用 --- 來標(biāo)識日志開始部分
  • 線程名:方括號括起來(可能會(huì)截?cái)嗫刂婆_輸出)
  • Logger名:通常使用源代碼的類名
  • 日志內(nèi)容:我們輸出的消息

控制臺輸出

日志級別從低到高分為:

TRACE < DEBUG < INFO < WARN < ERROR < FATAL稳其。

如果設(shè)置為WARN ,則低于WARN的信息都不會(huì)輸出炸卑。

Spring Boot中默認(rèn)配置ERROR既鞠、WARNINFO級別的日志輸出到控制臺。

您還可以通過啟動(dòng)您的應(yīng)用程序 --debug 標(biāo)志來啟用“調(diào)試”模式(開發(fā)的時(shí)候推薦開啟),以下兩種方式皆可:

在運(yùn)行命令后加入--debug標(biāo)志盖文,如:$ java -jar springTest.jar --debug嘱蛋,這種命令會(huì)被 SpringBoot 解析,且優(yōu)先級最高

在application.properties中配置debug=true五续,該屬性置為true的時(shí)候洒敏,核心Logger(包含嵌入式容器、hibernate疙驾、spring)會(huì)輸出更多內(nèi)容凶伙,但是你自己應(yīng)用的日志并不會(huì)輸出為DEBUG級別。

啟用調(diào)試模式時(shí)它碎,將配置一些核心記錄器(嵌入式容器函荣、 Hibernate 和 Spring Boot)來輸出更多的信息。 啟用調(diào)試模式不會(huì)將應(yīng)用程序配置為以 DEBUG 級別登錄所有消息扳肛。

或者傻挂,你也可以通過使用 --trace標(biāo)志(或application.properties中的trace=true)啟用“trace”模式。這樣做可以為選擇的核心記錄器進(jìn)行跟蹤日志記錄(嵌入式容器挖息,Hibernate數(shù)據(jù)庫生成和整個(gè)Spring 組合)金拒。

彩色編碼輸出

如果你的終端支持ANSI,顏色輸出用于幫助可讀性旋讹。你可以在配置 文件中設(shè)置spring.output.ansi.enabled 來改變殖蚕。
比如:

spring.output.ansi.enabled=always
  • ALWAYS: 啟用 ANSI 顏色的輸出。
  • DETECT: 嘗試檢測 ANSI 著色功能是否可用沉迹。
  • NEVER: 禁用 ANSI 顏色的輸出睦疫。

顏色編碼是通過使用% clr 轉(zhuǎn)換字來配置的。 在最簡單的形式中鞭呕,轉(zhuǎn)換器根據(jù)日志級別對輸出進(jìn)行顏色設(shè)置蛤育,如下面的示例所示:

%clr(%5p)

下表描述了將日志級別映射為顏色的情況:

Level color
FATAL Red
ERROR Red
WARN Yellow
INFO Green
DEBUG Green
TRACE Green

或者,你可以指定應(yīng)該使用的顏色或樣式,將其作為轉(zhuǎn)換的選項(xiàng)瓦糕。例如底洗,為了使文本黃色,使用下
面的設(shè)置:

%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}

支持以下顏色和風(fēng)格:

  • blue
  • cyan
  • faint
  • green
  • magenta
  • red
  • yellow

文件輸出

默認(rèn)情況下咕娄,Spring Boot 只會(huì)將日志記錄到控制臺上亥揖,而不會(huì)寫日志文件。 如果你希望除了控制臺輸出之外編寫日志文件圣勒,你需要設(shè)置一個(gè)logging.file件或 logging.path 屬性(例如在你的application.properties)费变。

logging.file logging.path Example Description
none none 控制臺只記錄日志
特定文件 none my.log 寫入指定的日志文件。名字可以是工作目錄的確切位置或相對位置
noen 特定目錄 /var/log 寫入spring.log到指定的目錄圣贸。名字可以是工作目錄的確切位置或相對位置

日志文件在達(dá)到 10MB 時(shí)進(jìn)行切割挚歧,與控制臺輸出一樣,產(chǎn)生一個(gè)新的日志文件(如:spring.1.log吁峻、spring.2.log)滑负,新的日志依舊輸出到 spring.log 中去,默認(rèn)情況下會(huì)記錄 ERROR用含、WARN矮慕、INFO 級別消息。

你可以通過設(shè)置logging.file.max大小的屬性來改變?nèi)罩疚募拇笮∠拗聘汀R郧扒懈畹奈募?huì)被無限期存檔凡傅,除非已經(jīng)設(shè)置了logging.file.max歷史屬性

注:logging.file和logging.path二者不能同時(shí)使用,如若同時(shí)使用肠缔,則只有l(wèi)ogging.file生效

日志系統(tǒng)是在應(yīng)用程序生命周期的早期初始化的。 因此哼转,在通過@propertysource 注釋加載的屬性文件中找不到日志屬性明未。

日志記錄屬性獨(dú)立于實(shí)際的日志基礎(chǔ)結(jié)構(gòu)。 因此壹蔓,spring Boot 不管理特定的配置鍵(如 Logback.configurationFile for Logback)趟妥。

日志輸出級別

所有支持的日志記錄系統(tǒng)可以通過使用logging.level.<包名或Logger名>=<日志級別>在Spring環(huán)境中設(shè)置日志記錄器級別(例如,在application.properties中)佣蓉,其級別可以是TRACE披摄、DEBUG、INFO勇凭、WARN疚膊、ERROR、FATAL或OFF任意一個(gè)虾标。root記錄器可以通過使用logging.level.root進(jìn)行配置寓盗。

下面的示例顯示了在application.properties中配置。

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

自定義日志配置

你可以使用org.springframework.boot.logging.LoggingSystem系統(tǒng)屬性強(qiáng)制Spring Boot使用特定的日志記錄系統(tǒng)。 該值應(yīng)該是LoggingSystem實(shí)現(xiàn)的完全限定類名傀蚌。 您還可以使用none值完全禁用Spring Boot的日志記錄配置基显。

因?yàn)槿罩居涗浭窃趧?chuàng)建ApplicationContext之前初始化的,所以無法控制Spring@Configuration文件中的@PropertySources的日志記錄善炫。更改日志記錄系統(tǒng)或完全禁用日志記錄的唯一方法是通過系統(tǒng)屬性撩幽。

根據(jù)你的日志記錄系統(tǒng),將加載以下文件:

Logging System Customization
Logback logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

在可能的情況下箩艺,我們建議你使用 -spring來進(jìn)行日志配置(例如:logback-spring.xml而不是logback.xml)窜醉。如果使用logback.xml,Spring無法完全控制日志初始化舅桩。

為了幫助進(jìn)行自定義酱虎,Spring環(huán)境將一些其他屬性轉(zhuǎn)移到System屬性,如下表所述:

Spring Environment System Property Comments
logging.exception-conversion-word LOG_EXCEPTION_CONVERSION_WORD 記錄異常時(shí)使用的轉(zhuǎn)換詞擂涛。
logging.file LOG_FILE 將日志寫入到指定的文件中读串,默認(rèn)為相對路徑,可以設(shè)置成絕對路徑
logging.file.max-size LOG_FILE_MAX_SIZE 最大日志文件大小(如果啟用了日志文件)撒妈。 (只支持默認(rèn)的 Logback 設(shè)置恢暖。)
logging.file.max-history LOG_FILE_MAX_HISTORY 需要保存的存檔日志文件的最大數(shù)量(如果啟用了日志文件)。 (只支持默認(rèn)的 Logback 設(shè)置狰右。)
logging.path LOG_PATH 將名為 spring.log 寫入到指定的 文件夾 中杰捂,如(/var/log)
logging.pattern.console CONSOLE_LOG_PATTERN 在控制臺上使用的日志模式(stdout)。 (只支持默認(rèn)的 Logback 設(shè)置棋蚌。)
logging.pattern.dateformat LOG_DATEFORMAT_PATTERN 設(shè)置日志輸出日期格式(只支持默認(rèn)的 Logback 設(shè)置嫁佳。)
logging.pattern.file FILE_LOG_PATTERN 定義輸出到日志文件的日志格式
logging.pattern.level LOG_LEVEL_PATTERN 繪制日志級別時(shí)使用的格式
PID PID 當(dāng)前的進(jìn)程ID

如果你想在日志屬性中使用占位符,則應(yīng)使用 Spring Boot 的語法谷暮,而不是基礎(chǔ)框架的語法蒿往。 值得注意的是,如果使用Logback湿弦,你應(yīng)該使用 : 作為屬性名和其默認(rèn)值之間的分隔符瓤漏,而不是使用 :-

Logback擴(kuò)展配置

Spring Boot 包含了一些 Logback 擴(kuò)展颊埃,這些擴(kuò)展可以幫助提高配置蔬充。 您可以在 logback-spring.xml 配置文件中使用這些擴(kuò)展。
由于標(biāo)準(zhǔn)logback.xml配置文件過早加載班利,所以不能在其中使用擴(kuò)展饥漫。您需要使用logback- spring.xml,或者定義一個(gè)loggingconfig屬性肥败。

擴(kuò)展配置不能與Logback的配置掃描一起使用趾浅。 如果嘗試這樣做愕提,對配置文件進(jìn)行更改會(huì)導(dǎo)致類似以下記錄之一的錯(cuò)誤:

ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]

springProperty

<springProfile> 標(biāo)簽使我們讓配置文件更加靈活熄攘,它可以選擇性的包含或排除部分配置鳞尔。

<springProfile name="dev">
    <!-- 開發(fā)環(huán)境時(shí)激活 -->
</springProfile>

<springProfile name="dev,test">
    <!-- 開發(fā),測試的時(shí)候激活蜘拉,多個(gè)環(huán)境用逗號隔開-->
</springProfile>

<springProfile name="!prod">
    <!-- 當(dāng) "生產(chǎn)" 環(huán)境時(shí)证膨,該配置不激活-->
</springProfile>

例子:

    <!-- 測試環(huán)境+開發(fā)環(huán)境. 多個(gè)使用逗號隔開. -->
    <springProfile name="test,dev">
        <logger name="com.example.demo.controller" level="DEBUG" additivity="false">
            <appender-ref ref="consoleLog"/>
        </logger>
    </springProfile>

    <!-- 生產(chǎn)環(huán)境. -->
    <springProfile name="prod">
        <logger name="com.example.demo.controller" level="INFO" additivity="false">
            <appender-ref ref="consoleLog"/>
        </logger>
    </springProfile>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末如输,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子央勒,更是在濱河造成了極大的恐慌不见,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崔步,死亡現(xiàn)場離奇詭異稳吮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)井濒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門灶似,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瑞你,你說我怎么就攤上這事酪惭。” “怎么了者甲?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵春感,是天一觀的道長。 經(jīng)常有香客問我虏缸,道長鲫懒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任刽辙,我火速辦了婚禮刀疙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扫倡。我一直安慰自己,他們只是感情好竟纳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布撵溃。 她就那樣靜靜地躺著,像睡著了一般锥累。 火紅的嫁衣襯著肌膚如雪缘挑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天桶略,我揣著相機(jī)與錄音语淘,去河邊找鬼诲宇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惶翻,可吹牛的內(nèi)容都是我干的姑蓝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼吕粗,長吁一口氣:“原來是場噩夢啊……” “哼纺荧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起颅筋,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤宙暇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后议泵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體占贫,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年先口,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了型奥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡池充,死狀恐怖桩引,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情收夸,我是刑警寧澤坑匠,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站卧惜,受9級特大地震影響厘灼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咽瓷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一设凹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茅姜,春花似錦闪朱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至素标,卻和暖如春称诗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背头遭。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工寓免, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留癣诱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓袜香,卻偏偏與公主長得像撕予,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子困鸥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容