最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot MDC全鏈路調(diào)用日志跟蹤實現(xiàn)詳解

 更新時間:2023年02月08日 09:31:23   作者:IT小馬哥  
這篇文章主要為大家介紹了SpringBoot MDC全鏈路調(diào)用日志跟蹤實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

MDC 介紹

MDC(Mapped Diagnostic Context,映射調(diào)試上下文)是 log4j 、logback及l(fā)og4j2 提供的一種方便在多線程條件下記錄日志的功能。MDC 可以看成是一個與當前線程綁定的哈希表,可以往其中添加鍵值對。MDC 中包含的內(nèi)容可以被同一線程中執(zhí)行的代碼所訪問。當前線程的子線程會繼承其父線程中的 MDC 的內(nèi)容。當需要記錄日志時,只需要從 MDC 中獲取所需的信息即可。MDC 的內(nèi)容則由程序在適當?shù)臅r候保存進去。對于一個 Web 應(yīng)用來說,通常是在請求被處理的最開始保存這些數(shù)據(jù)。

API 說明

  • clear() => 移除所有 MDC
  • get (String key) => 獲取當前線程 MDC 中指定 key 的值
  • getContext() => 獲取當前線程 MDC 的 MDC
  • put(String key, Object o) => 往當前線程的 MDC 中存入指定的鍵值對
  • remove(String key) => 刪除當前線程 MDC 中指定的鍵值對

MDC 使用

Constants.TRACE_ID = "traceId"

添加攔截器

public class LogInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //如果有上層調(diào)用就用上層的ID
        String traceId = request.getHeader(Constants.TRACE_ID);
        if (traceId == null) {
            traceId = TraceIdUtil.getTraceId();
        }
        MDC.put(Constants.TRACE_ID, traceId);
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
            throws Exception {
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        //調(diào)用結(jié)束后刪除
        MDC.remove(Constants.TRACE_ID);
    }
}

修改日志格式

<!-- 日志輸出格式 -->
<property name="log.pattern" value="[TraceId:%X{traceId}] %d{HH????ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>

重點是 %X{traceId},traceId 和 MDC 中的鍵名稱一致。

簡單使用就這么容易,但是在有些情況下 traceId 將獲取不到。

常見問題

子線程日志打印丟失 traceId

   //獲取traceId
   Map<String, String> mdcContextMap = MDC.getCopyOfContextMap();
   return  () ->{
     //添加到子線程中
     MDC.setContextMap(mdcContextMap);
     System.out.println("你好呀!");
   }       

以上就是SpringBoot MDC全鏈路調(diào)用日志跟蹤實現(xiàn)詳解的詳細內(nèi)容,更多關(guān)于SpringBoot MDC日志跟蹤的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring boot啟動原理及相關(guān)組件整理

    Spring boot啟動原理及相關(guān)組件整理

    這篇文章主要介紹了Spring boot啟動原理及相關(guān)組件整理,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-12-12
  • IDEA感覺不香了AI智能編程工具Cursor使用圖文教程

    IDEA感覺不香了AI智能編程工具Cursor使用圖文教程

    這篇文章主要介紹了IDEA感覺不香了AI智能編程工具Cursor使用,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Java基礎(chǔ)入門之switch怎么使用枚舉

    Java基礎(chǔ)入門之switch怎么使用枚舉

    在Java開發(fā)中,switch語句是一種常用的流控制語句,而當使用枚舉類型作為條件時,我們常常會遇到報錯問題,那么該如何解決呢,下面就來詳細講講
    2023-06-06
  • Java利用JSch實現(xiàn)SSH遠程操作的技術(shù)指南

    Java利用JSch實現(xiàn)SSH遠程操作的技術(shù)指南

    在日常開發(fā)中,許多應(yīng)用需要通過 SSH 協(xié)議遠程連接服務(wù)器來執(zhí)行命令、上傳或下載文件,JSch是一個功能強大的 Java 庫,它提供了便捷的接口來實現(xiàn) SSH 連接和其他遠程管理功能,本文將介紹 JSch 的基本功能,并通過實際代碼示例幫助您快速上手,需要的朋友可以參考下
    2025-03-03
  • Java并發(fā)編程:CountDownLatch與CyclicBarrier和Semaphore的實例詳解

    Java并發(fā)編程:CountDownLatch與CyclicBarrier和Semaphore的實例詳解

    這篇文章主要介紹了Java并發(fā)編程:CountDownLatch與CyclicBarrier和Semaphore的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • 使用spring容器在初始化Bean時前和后的操作

    使用spring容器在初始化Bean時前和后的操作

    這篇文章主要介紹了使用spring容器在初始化Bean時前和后的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java?POI庫從入門到精通舉例詳解

    Java?POI庫從入門到精通舉例詳解

    Apache?POI是一個開源項目,能夠讓Java程序員讀取和寫入Microsoft?Office格式的文件,包括Excel、Word和PowerPoint等,本文詳細介紹了POI庫的安裝、結(jié)構(gòu)與功能,以及如何在Java中進行基本操作和進階應(yīng)用,需要的朋友可以參考下
    2024-10-10
  • java ImmutableMap的使用說明

    java ImmutableMap的使用說明

    這篇文章主要介紹了java ImmutableMap的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 如何用Spring發(fā)送電子郵件

    如何用Spring發(fā)送電子郵件

    這篇文章主要介紹了如何用Spring發(fā)送電子郵件,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-02-02
  • play for scala 實現(xiàn)SessionFilter 過濾未登錄用戶跳轉(zhuǎn)到登錄頁面

    play for scala 實現(xiàn)SessionFilter 過濾未登錄用戶跳轉(zhuǎn)到登錄頁面

    這篇文章主要介紹了play for scala 實現(xiàn)SessionFilter 過濾未登錄用戶跳轉(zhuǎn)到登錄頁面的相關(guān)資料,需要的朋友可以參考下
    2016-11-11

最新評論

临颍县| 唐山市| 孝义市| 汨罗市| 黔西县| 保山市| 金堂县| 宣恩县| 祁门县| 西青区| 西乡县| 祥云县| 宣汉县| 旌德县| 宁蒗| 琼结县| 榆林市| 顺昌县| 特克斯县| 沙田区| 仙桃市| 丰镇市| 拜城县| 峡江县| 海淀区| 西林县| 枣强县| 景德镇市| 和顺县| 北碚区| 青田县| 元朗区| 正阳县| 洛隆县| 牡丹江市| 万源市| 和政县| 黎川县| 二连浩特市| 莱芜市| 泾阳县|