Log4J2 日誌鏈實現

2021-09-02 13:07:31 字數 1230 閱讀 3430

背景:

日誌是系統出現問題,最關鍵的資訊,讓開發人員快速找到日誌資訊,定位問題,我們需要有乙個完整的日誌系統,業界有elk等日誌系統,特別在分布式(微服務)中,日誌就變得更加複雜,伺服器資源多,日誌列印開發無法快速找到日誌資訊在哪一台機器上,這時就需要我們記錄日誌的資訊鏈路(路由),日誌跟蹤id(traceid)等資訊,返回跟前端,開發通過檢視介面就能快速找到日誌資訊方便定位問題。

關鍵技術

log4j : mdc

log4j : threadcontext

mdc介紹

mdc 可以看成是乙個與當前執行緒繫結的雜湊表,可以往其中新增鍵值對。mdc 中包含的內容可以被同一執行緒中執行的**所訪問。當前執行緒的子執行緒會繼承其父執行緒中的 mdc 的內容。當需要記錄日誌時,只需要從 mdc 中獲取所需的資訊即可。mdc 的內容則由程式在適當的時候儲存進去。對於乙個 web 應用來說,通常是在請求被處理的最開始儲存這些資料。

threadcontext 介紹

執行緒上下文

平台實現方式

1. 實現日誌過濾器logchainfilter

2.修改log4j列印日誌資訊

3.記錄日誌路由資訊

4.清除日誌上下文資訊

日誌實現同上,但是我們需要將tranceid新增到響應頭當中,如果在每個介面方法中新增,會覺得很笨,最好能統一為介面請求新增。所以我們需要用到spring mvc的乙個controller的通知,動態加上去
編寫乙個介面實現responsebodyadvice介面,新增註解@controlleradvice,此時該介面並成功注入為controller層的切面通知,可以獲取response物件

Log4j2 日誌級別

log4j2日誌級別 級別 在log4j2中,共有8個級別,按照從低到高為 all trace debug info warn error fatal off。all 最低等級的,用於開啟所有日誌記錄.trace 是追蹤,就是程式推進一下.debug 指出細粒度資訊事件對除錯應用程式是非常有幫助的....

springmvc 加入log4j2日誌

這次記錄下springmvc加入log4j2的日誌。1.在pom檔案中加入log4j2相關的依賴 org.apache.logging.log4jgroupid log4j coreartifactid 2.1version dependency org.apache.logging.log4jgr...

log4j2日誌重複問題的解決

在乙個新專案中採用了log4j2 2.3 jdk6最高只支援這個版本 原本也沒發現有什麼問題。後來為了減少日誌輸出把root的日誌級別改到了warn,把自己包的級別改到了trace。剛開始沒注意,次日下午才發現日誌內容都輸出2次,以為修改了 動態發布導致的,也沒關注。第三天,啟動專案時發現sprin...