slf4j的MDC

一拜秧、MDC概念

slf4j除了trace痹屹、debug、info枉氮、warn志衍、error這幾個日志接口外,還可以配合MDC將數據寫入日志聊替。換句話說MDC也是用來記錄日志的楼肪,但它的使用方式與使用日志接口不同。

在使用日志接口時我們一般這么做

Logger LOG = LoggerFactory.getLogger("LOGNAME_OR_CLASS");
if(LOG.isDebugEnabled()) {
  LOG.debug("log debug");
}

MDC從使用方式上有些不同,我對它的理解是MDC可以將一個處理線程中你想體現(xiàn)在日志文件中的數據統(tǒng)一管理起來惹悄,根據你的日志文件配置決定是否輸出春叫。

比如以下但不限于以下場景可以考慮使用MDC來達到目的

在日志中體現(xiàn)請求用戶IP地址
用戶使用http客戶端的user-agent
記錄一次處理線程的日志跟蹤編號(這個編號目的是為了查詢日志方便,結合grep命令能根據跟蹤編號將本次的處理日志全部輸出)

二、MDC的使用

org.slf4j.MDC我個人會用AOP或Filter或Interceptor這類工具配合使用暂殖,獲得你希望輸出到日志的變量并調用MDC.put(String key, String val)价匠,比如下面代碼片段第5行:

public static void initUUID(String uuid) {
        if(!StringUtils.isBlank(getUUID())) {
            LOGGER.debug("初始化uuid是發(fā)現(xiàn)uuid:{} 已存在,已重置", getUUID());
        }

        MDC.put("mdc_trace_id", StringUtils.isBlank(uuid)?createUUID():uuid);
    }

代碼通過AOP記錄了每次請求的traceId并使用變量"mdc_trace_id"記錄呛每,在日志配置文件里需要設置變量才能將"mdc_trace_id"輸出到日志文件中踩窖。我以logback配置文件為例,看日志第6行%X{mdc_trace_id}:

<appender name="activexAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="/opt/web/commerce/wf/logs/commerce.log" />
        <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="[%d{MM-dd HH:mm:ss SSS\} %-5p] [%X{mdc_trace_id}] [%t] %c{3\} - %m%n" />
        </layout>
        
    </appender>

三、MDC帶來的好處

如果你的系統(tǒng)除了bug,老大讓你查某一用戶數據到日志里分析一下晨横。如果沒有MDC我猜此時此刻你應該處于雪崩狀態(tài)毙石。MDC恰到好處的讓你能夠實現(xiàn)快速定位線上問題與某一用戶的操作行為。

如果你是個代碼潔癖颓遏,封裝了公司LOG的操作徐矩,并且將處理線程跟蹤日志號也封裝了進去,但只有使用了你封裝日志工具的部分才能打印跟蹤日志號叁幢,其他部分(比如hibernate滤灯、mybatis、httpclient等等)日志都不會體現(xiàn)跟蹤號曼玩。當然我們可以通過linux命令來繞過這些困擾鳞骤。
使代碼簡潔、日志風格統(tǒng)一

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末黍判,一起剝皮案震驚了整個濱河市豫尽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌顷帖,老刑警劉巖美旧,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贬墩,居然都是意外死亡榴嗅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門陶舞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗽测,“玉大人,你說我怎么就攤上這事肿孵∵胫啵” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵停做,是天一觀的道長晤愧。 經常有香客問我,道長雅宾,這世上最難降的妖魔是什么养涮? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮眉抬,結果婚禮上贯吓,老公的妹妹穿的比我還像新娘。我一直安慰自己蜀变,他們只是感情好悄谐,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著库北,像睡著了一般爬舰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寒瓦,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天情屹,我揣著相機與錄音,去河邊找鬼杂腰。 笑死垃你,一個胖子當著我的面吹牛,可吹牛的內容都是我干的喂很。 我是一名探鬼主播惜颇,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼少辣!你這毒婦竟也來了凌摄?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤漓帅,失蹤者是張志新(化名)和其女友劉穎锨亏,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體忙干,經...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡屯伞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了豪直。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劣摇。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弓乙,靈堂內的尸體忽然破棺而出末融,到底是詐尸還是另有隱情,我是刑警寧澤暇韧,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布勾习,位于F島的核電站,受9級特大地震影響懈玻,放射性物質發(fā)生泄漏巧婶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望艺栈。 院中可真熱鬧英岭,春花似錦、人聲如沸湿右。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毅人。三九已至吭狡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丈莺,已是汗流浹背划煮。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缔俄,地道東北人般此。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像牵现,于是被迫代替她去往敵國和親铐懊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理瞎疼,服務發(fā)現(xiàn)科乎,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 用兩張圖告訴你贼急,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料茅茂? 從這篇文章中你...
    hw1212閱讀 12,727評論 2 59
  • 星期天的早晨,旭旭一陣一陣的咳嗽太抓,想睡懶覺都沒有理由了空闲。起床,讓孩子喝了點水走敌。一看還沒有6點碴倾,我說讓他再...
    旭旭齊齊閱讀 372評論 0 3
  • 下午。 天低沉得壓抑掉丽,灰蒙蒙的云不帶一絲感情跌榔, 風混雜著熱流, 讓人胸口發(fā)悶捶障∩耄狂風裹著強勁的力量摧殘著路...
    兆圭閱讀 188評論 0 1
  • 城南老門東自從今年春節(jié)開街試迎客起就引起南京市民的關注,尤其是曾經居住在這里的老城南项炼。因此担平,假如你去這里就會...
    jinlinglq閱讀 258評論 0 0