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