1. 程式人生 > >log4j MDC用戶操作日誌追蹤配置

log4j MDC用戶操作日誌追蹤配置

我們 事先 記錄日誌 mapped 自己的 相關 其中 ssi nbsp

https://blog.csdn.net/userwyh/article/details/52862216

一、MDC介紹

MDC(Mapped Diagnostic Context,映射調試上下文)是 log4j 和 logback 提供的一種方便在多線程條件下記錄日誌的功能。某些應用程序采用多線程的方式來處理多個用戶的請求。在一個用戶的使用過程中,可能有多個不同的線程來進行處理。典型的例子是 Web 應用服務器。當用戶訪問某個頁面時,應用服務器可能會創建一個新的線程來處理該請求,也可能從線程池中復用已有的線程。在一個用戶的會話存續期間,可能有多個線程處理過該用戶的請求。這使得比較難以區分不同用戶所對應的日誌。當需要追蹤某個用戶在系統中的相關日誌記錄時,就會變得很麻煩。

  一種解決的辦法是采用自定義的日誌格式,把用戶的信息采用某種方式編碼在日誌記錄中。這種方式的問題在於要求在每個使用日誌記錄器的類中,都可以訪問到用戶相關的信息。這樣才可能在記錄日誌時使用。這樣的條件通常是比較難以滿足的。MDC 的作用是解決這個問題。

  MDC 可以看成是一個與當前線程綁定的哈希表,可以往其中添加鍵值對。MDC 中包含的內容可以被同一線程中執行的代碼所訪問。當前線程的子線程會繼承其父線程中的 MDC 的內容。當需要記錄日誌時,只需要從 MDC 中獲取所需的信息即可。MDC 的內容則由程序在適當的時候保存進去。對於一個 Web 應用來說,通常是在請求被處理的最開始保存這些數據。

二、MDC使用案例

相對比較大的項目來說,一般會有多個開發人員,如果每個開發人員憑自己的理解打印日誌,那麽當用戶反饋問題時,很難通過日誌去快速的定位到出錯原因,也會消耗更多的時間。所以針對這種問題,一般會定義好整個項目的日誌格式,如果是需要追蹤的日誌,開發人員調用統一的打印方法,在日誌配置文件裏面定義好相應的字段,通過MDC功能就能很好的解決問題。

比如我們可以事先把用戶的sessionId,登錄用戶的用戶名,訪問的城市id,當前訪問商戶id等信息定義成字段,線程開始時把值放入MDC裏面,後續在其他地方就能直接使用,無需再去設置了。

log4j MDC用戶操作日誌追蹤配置