問題描述
項目引入spring-cloud-starter-sleuth,發(fā)現(xiàn)有些自定義Filter以及線程池異步線程日志無traceId.容易在日志排查中忽略掉,從而影響日志分析.
原因分析以及解決方案
自定義Filter日志無traceId
-
原因(Filter優(yōu)先級問題)
sleuth框架的filter優(yōu)先級為以下值
image.png
image.png
-
解決方案
設置優(yōu)先級高于上面的即可
image.png
線程池異步線程日志無traceId問題
- 原因
線程池實例不在spring容器管理時,sleuth框架無法做處理
如以下定義線程池方式不由spring管理
-
在類中聲明為成員變量
image.png - 在方法中聲明線程池
- 解決方案
- 在spring容器中注冊線程池.如使用@Bean等
- 使用MDC獲取再做處理(這個相對麻煩點,建議使用方法1)
String traceId = MDC.get("X-B3-TraceId");
String spanId = MDC.get("X-B3-SpanId");