<dependency>
<groupId>com.github.dreamroute</groupId>
<artifactId>tracer-spring-boot-starter</artifactId>
<version>最新版本</version>
</dependency>
在服务消费端创建一个过滤器(拦截器也可以),如果已经存在那么在存在的过滤器基础之上改造也可,如果有多个过滤器,最好将这部分逻辑放在最外层过滤器中,在过滤器中实现大概如下逻辑:
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();
}
}
}
- 创建
src/main/resource/META-INF/dubbo
目录(如果已经存在就忽略); - 在
dubbo
目录下创建文件com.alibaba.dubbo.rpc.Filter
; - 在
com.alibaba.dubbo.rpc.Filter
文件里加入内容:- 如果是服务消费方,添加
TracerConsumer = xxx.TracerConsumer
(xxx为全路径) - 如果是服务提供方,添加
TracerProvider = xxx.TracerProvider
(xxx为全路径) - 如果既是消费方又是提供方,则将上面两行都填加进去,写成两行
- 如果是服务消费方,添加
在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>