SpringBoot+MDC實現全鏈路調用日志跟蹤


在前面寫的一篇文章中,熱心網友【地藏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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM