skywalking traceId 跨线程一致 Java

阅读 141

2022-11-08


通常,traceId在线程中是一致的。

如果某些动作,是新开线程去执行,那么执行的代码的traceId 和 调用着就不一样,这样就没法串起来了。


sw官方,提供了一个注解

TraceCrossThread

并用几个例子,说明改如何做,可以使子线程执行中 打印的日志,traceId和父线程一致。


我用过的是以下这种

    ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.submit(CallableWrapper.of(new Callable<String>() {
@Override public String call() throws Exception {
return null;
}
}));

就是使用CallableWrapper包装,可以看出,这个类,也是使用了TraceCrossThread这个注解。


同理还有runnable的封装。



参考

​​https://skywalking.apache.org/docs/skywalking-java/v8.8.0/en/setup/service-agent/java-agent/application-toolkit-trace-cross-thread/​​

精彩评论(0)

0 0 举报