实现方式:

  1. 自己生成 traceId 并 put 到 MDC 里面;

  2. 使用 SkyWalking traceid 进行链路追踪;

  3. Tlog实现;

  4. 使用 Elastic APM 的 trace.id 进行链路追踪;

    分布式追踪系统从诞生之际到有实质性的突破,很大程度受到Google Dapper的影响,目前常见的分布式追踪系统有Twitter的Zipkin、SkyWalking、阿里的EagleEye、PinPoint和美团的MTrace等,这些大多都是基于Google Dapper的设计思想

    多语言的就自行实现吧,通过head传递过去,解析出来,打印到日志中

手动实现

MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 、logback及log4j2 提供的一种方便在多线程条件下记录日志的功能。MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。

OncePerRequestFilter请求进入的时候增加traceId、trackId、requestId、tid(其中选一个变量名称),设置到MDC 中,日志打印的时候加上,response的时候也加上

注意:

  1. 子线程需要加上
  2. http调用的时候加上
    1. 拦截器HandlerInterceptor 处理进入
    2. Interceptor 处理restTemplate或者okHttp等,加入到head中
  3. spanId(每个服务的ID,服务名称)

SpringBoot + MDC 实现全链路调用日志跟踪-CSDN博客

skywalking

    <dependency>
         <groupId>org.apache.skywalking</groupId>
         <artifactId>apm-toolkit-logback-1.x</artifactId>
         <version>{project.release.version}</version>
     </dependency>
 logback.xml
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

logback plugin

juejin.cn

TLog