Spring Boot與logback的那XX件事

前言

????套用網(wǎng)絡(luò)流行的標(biāo)題楼镐,開始了這篇文章。之前使用Spring Boot往枷,日志一直都是nohup再把標(biāo)準(zhǔn)輸出重定向到一個文件里框产,這樣毫無疑問是很low的凄杯。于是趁著項目的間歇,照著網(wǎng)上的教程哼哧哼哧的把logback配起來秉宿。配完之后戒突,再想想怎么用起來更高大上一點,就給自己提了下面幾個問題:

  • 不同級別的日志怎么輸出到不同的文件描睦?
  • 不同服務(wù)的日志怎么輸出到不同的文件膊存?
  • 怎么通過一個traceId把同一次請求里的多條日志串起來?
  • 日志的配置怎么在打包時能根據(jù)不同的環(huán)境去調(diào)整忱叭?
  • 運行中的服務(wù)可以動態(tài)的調(diào)整日志級別么隔崎?

????為了解決這些問題,就有了文章標(biāo)題所說的那XX件事韵丑。下面將大概介紹下各個問題的解決方案爵卒。最終的成果在代碼中:
????logtest

1.Filter

????第一個問題的解決方案,就是使用appender中的Filter埂息。logback支持多種Filter技潘,對于日志級別的過濾使用LevelFilter遥巴。

<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{requestId}] [%-5level] [%logger{36}:%line] - [%msg]%n
        </pattern>
        <charset>UTF-8</charset>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${LOG_HOME}/${APP_NAME}/debug.log.%d{yyyy-MM-dd}</FileNamePattern>
        <MaxHistory>${LOG_KEEP_TIME}</MaxHistory>
    </rollingPolicy>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>DEBUG</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
 </appender>

2.logger

????之前配置日志總是喜歡把appender都配置在root下千康,這個是一種全局的配置,其實可以通過logger進(jìn)一步細(xì)化铲掐。

<logger name="tactics" additivity="false" level="INFO">
    <appender-ref ref="tactics"/>
</logger>

????對應(yīng)的獲取logger方法為:

private final Logger tacticsLogger = LoggerFactory.getLogger("tactics");

????也可以按照我們慣用的方式:

<logger name="com.qcd.logtest.TacticsLogger" additivity="false" level="INFO">
    <appender-ref ref="tactics"/>
</logger>

????對應(yīng)的獲取logger方法為:

private final Logger tacticsLogger = LoggerFactory.getLogger(getClass());

????logger里面有個很重要的屬性additivity拾弃,這個屬性決定了日志里的內(nèi)容是否會向上一級日志傳遞。

3.MDC

????對于第三個問題想過自己去封裝一個日志工具類摆霉,通過ThreadLocal的方式來提供uuid豪椿,但是總覺得沒那么自然。也看到有人用Spring Cloud Sleuth來達(dá)到目的携栋,又覺得太重搭盾。后面發(fā)現(xiàn)了MDC這個好東西,覺得很滿意婉支。
????MDC(Mapped Diagnostic Context鸯隅,映射調(diào)試上下文)是 logback 提供的一種方便在多線程條件下記錄日志的功能。MDC 可以看成是一個與當(dāng)前線程綁定的哈希表向挖,可以往其中添加鍵值對蝌以。
????具體的使用代碼可以參考LogInterceptor.java
????其中比較關(guān)鍵的兩處如下:

MDC.put("requestId", uuid);
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{requestId}] [%-5level] [%logger{36}:%line] - [%msg]%n

????在pattern中使用的[%X{requestId}]就是來自在MDC中存儲的uuid何之。

4.logback-spring.xml

????既然加上了spring這么個后綴跟畅,肯定會給你好處的。

  • 可以拿到application.properties里的配置:
<springProperty scope="context" name="logPath" source="logging.path"/>
<property name="LOG_HOME" value="${logPath}"/>
  • 可以拿到使用的profile
<springProfile name="test,dev">
     <logger name="com.qcd.logtest.TacticsLogger" level="INFO" />
</springProfile>
<springProfile name="pro">
     <logger name="com.qcd.logtest.TacticsLogger" level="ERROR" />
</springProfile>

5.actuator

????spring1.5.X版本引入的一個新的控制端點:/loggers溶推,這個端點非常強大徊件,可以查看當(dāng)前的日志級別奸攻,還可以動態(tài)修改日志級別。比如要修改LogtestController的日志級別虱痕,通過發(fā)送POST請求到:

http://localhost:9011/manage/loggers/com.qcd.logtest.controller.LogtestController

????請求體為:

{
    "configuredLevel": "DEBUG"
}

最后

????感謝強大的開源社區(qū)舞箍,感謝互聯(lián)網(wǎng)上那些無私奉獻(xiàn)的同道!=哉睢疏橄!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市略就,隨后出現(xiàn)的幾起案子捎迫,更是在濱河造成了極大的恐慌,老刑警劉巖表牢,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窄绒,死亡現(xiàn)場離奇詭異,居然都是意外死亡崔兴,警方通過查閱死者的電腦和手機彰导,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敲茄,“玉大人位谋,你說我怎么就攤上這事⊙吡牵” “怎么了掏父?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長秆剪。 經(jīng)常有香客問我赊淑,道長,這世上最難降的妖魔是什么仅讽? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任陶缺,我火速辦了婚禮,結(jié)果婚禮上洁灵,老公的妹妹穿的比我還像新娘饱岸。我一直安慰自己,他們只是感情好处渣,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布伶贰。 她就那樣靜靜地躺著,像睡著了一般罐栈。 火紅的嫁衣襯著肌膚如雪黍衙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天荠诬,我揣著相機與錄音琅翻,去河邊找鬼位仁。 笑死,一個胖子當(dāng)著我的面吹牛方椎,可吹牛的內(nèi)容都是我干的聂抢。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼棠众,長吁一口氣:“原來是場噩夢啊……” “哼琳疏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起闸拿,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤空盼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后新荤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揽趾,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年苛骨,在試婚紗的時候發(fā)現(xiàn)自己被綠了篱瞎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡痒芝,死狀恐怖俐筋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吼野,我是刑警寧澤校哎,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布两波,位于F島的核電站瞳步,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腰奋。R本人自食惡果不足惜单起,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劣坊。 院中可真熱鬧嘀倒,春花似錦、人聲如沸局冰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽康二。三九已至碳胳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沫勿,已是汗流浹背挨约。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工味混, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诫惭。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓翁锡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親夕土。 傳聞我的和親對象是個殘疾皇子馆衔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)怨绣,斷路器哈踱,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 原文鏈接:https://docs.spring.io/spring-boot/docs/1.4.x/refere...
    pseudo_niaonao閱讀 4,680評論 0 9
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,778評論 6 342
  • 要加“m”說明是MB,否則就是KB了. -Xms:初始值 -Xmx:最大值 -Xmn:最小值 java -Xms8...
    dadong0505閱讀 4,813評論 0 53
  • 原本計劃在青島休息幾天再飛往下一站濰坊的梨熙,可是因為事情來得比較急一些开镣,一個在濰坊的朋友打來電話,說他馬上就要...
    掠岸飛閱讀 315評論 0 0