天天看點

skywalking traceId 跨線程一緻 Java

通常,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的封裝。