全鏈路日誌級別控制
阿新 • • 發佈:2021-10-26
痛點:日誌難排查,受成本的原因,又不能隨便打日誌,生產環境發版本流程困難,生產環境不支援動態調整日誌級別。
解決思路:主要在以下場景考慮日誌級別的建立
1. 從發起方來解決建立的問題
HTTP請求
如果是HTTP請求,通過前段Header增加logLevel=DEBUG來進行初始化
定時器
使用spring@schedule由於他是自己觸發的,所以無法來實現,或者說藉助key,redis來實現,但是太麻煩
所以建議從XXL-JOB中下手,xxl-job可以主動觸發定時器,並且可以自定義引數,即可自定義LogLevel=DEBUG來實現此功能
2. 從接收方來解決中轉傳遞的問題
MQ訊息
通過MQ的properties進行傳遞,藉助message advice 攔截器進行傳遞
DUBBO
使用dubbo consumerFilter providerFilter 來實現傳遞即可
OPEN Feign
跟HTTP請求實現方式一致,需要藉助到Feign Interceptor來實現傳遞,需要注意的是,如果是執行緒隔離,需要考慮Threadlocal的可傳遞性
日誌框架修改支援
以上只解決了logLevel=DEBUG的建立及在微服務之間傳遞的問題
如何修改日誌框架原始碼以支援上述目標
以上為log4j2的Logger.java
在isEnable 中 增加過濾判斷來實現即可。