使用 Logback 的 MDC(Mapped Diagnostic Contexts) 可以实现此功能。
新增 MDC 工具类
1 | public class MDCUtil { |
修改日志配置 (logback-spring.xml)
增加 %X{TRACE_ID},例如:
1 | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%15.15thread] %-40.40logger Line:%-3L [%X{TRACE_ID}] - %msg%n</pattern> |
其中 TRACE_ID 对应 MDC 工具类里的 TRACE_ID。
添加 AOP
1 | @Slf4j |
至此就可以在日志中看到 trace id 输出了,但是 MDC 是基于 ThreadLocal 不能跨线程传递,在异步调用的情况下 trace id 为空。
需要做如下改造:
修改 MDC 工具类
1 | public class MDCUtil { |
使用示例
1 | @Slf4j |
完整代码:GitHub













