Skip to content

Dreamroute/tracer

Repository files navigation

dubbo全局打印trace id

1、引入依赖

<dependency>
    <groupId>com.github.dreamroute</groupId>
    <artifactId>tracer-spring-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>

2、初始化trace id

在服务消费端创建一个过滤器(拦截器也可以),如果已经存在那么在存在的过滤器基础之上改造也可,如果有多个过滤器,最好将这部分逻辑放在最外层过滤器中,在过滤器中实现大概如下逻辑:

public class TracerFilter implements Filter {

   @Resource
   private Tracer tracer;

   @Override
   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
      // 可以设置多个需要传递的属性
      Map<String, String> map = new HashMap<>();
      map.put("traceId", UUID.fastUUID().toString(true));
      map.put("traceUserId", UUID.fastUUID().toString(true));
      map.put("traceLogId", UUID.fastUUID().toString(true));
      try {
         tracer.set(map);
         filterChain.doFilter(servletRequest, servletResponse);
      } finally {
         tracer.clear();
      }
   }
}

3、定义引入dubbo过滤器

  1. 创建src/main/resource/META-INF/dubbo目录(如果已经存在就忽略);
  2. dubbo目录下创建文件com.alibaba.dubbo.rpc.Filter
  3. com.alibaba.dubbo.rpc.Filter文件里加入内容:
    1. 如果是服务消费方,添加TracerConsumer = xxx.TracerConsumer(xxx为全路径)
    2. 如果是服务提供方,添加TracerProvider = xxx.TracerProvider(xxx为全路径)
    3. 如果既是消费方又是提供方,则将上面两行都填加进去,写成两行

4、logback.xml文件格式的修改

在logback.xml的appender/encoder/Pattern标签下增加[%X{traceId}]配置,例如:

 <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
     <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
         <level>info</level>
     </filter>
     <encoder>
         <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [${logging.app-name}] [%X{traceUserId}] [%X{traceLogId}] [%X{traceId}] --- [%t] %logger:%L : %m%n
         </Pattern>
         <charset>UTF-8</charset>
     </encoder>
 </appender>

5、如此配置下来,在你的服务消费方和提供方每一行日志都会带上traceId了

About

微服务链路跟踪

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages