在前面寫的一篇文章中,熱心網友【地藏Kelvin】評論說在多線程中還是有可能會亂掉,建議通過MDC打印traceId來個全鏈路調用跟蹤。掘金里個個都是人才,說話又好聽,超喜歡在里面。掘金使我進步,熱心網友總能提出改進意見
寫在前面
通過本文將了解到什么是MDC、MDC應用中存在的問題、如何解決存在的問題
MDC介紹
簡介:
MDC(Mapped Diagnostic Context,映射調試上下文)是 log4j 、logback及log4j2 提供的一種方便在多線程條件下記錄日志的功能。MDC 可以看成是一個與當前線程綁定的哈希表,可以往其中添加鍵值對。MDC 中包含的內容可以被同一線程中執行的代碼所訪問。當前線程的子線程會繼承其父線程中的 MDC 的內容。當需要記錄日志時,只需要從 MDC 中獲取所需的信息即可。MDC 的內容則由程序在適當的時候保存進去。對於一個 Web 應用來說,通常是在請求被處理的最開始保存這些數據
API說明:
- clear() => 移除所有MDC
- get (String key) => 獲取當前線程MDC中指定key的值
- getContext() => 獲取當前線程MDC的MDC
- put(String key, Object o) => 往當前線程的MDC中存入指定的鍵值對
- remove(String key) => 刪除當前線程MDC中指定的鍵值對
優點:
- 代碼簡潔,日志風格統一,不需要在log打印中手動拼寫traceId,即LOGGER.info("traceId:{} ", traceId)
暫時只能想到這一點
MDC使用
-
添加攔截器
作者:何甜甜在嗎
鏈接:https://www.jianshu.com/p/1e5aa59abef6
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。