如何将Traceid传播到一个交易中的其他线程,用于弹簧靴3.x以及千分尺 我正在学习使用千分尺在我的日志中标记Traceid和Spanid。但是我在一种情况下有问题:在一种方法中,我编写了一些多线程代码。当我使用千分尺时,它看起来像o ...

问题描述 投票:0回答:0
spanId
。但是我在一种情况下有问题:在一种方法中,我编写了一些多线程代码。当我使用千分尺时,看起来只有主线程具有

traceId

spanId
,而同一方法中的其他线程中的其他线程为null。
一些虚拟代码以显示以下内容:
traceId
结果是:只有主线程日志具有
public void doSomething() {
  log.info("here is main thread");
  executor.submit(() -> log.info("here is thread1"));
}

我知道我可以添加一些代码来启动新的跨度并传递到线程。但是理想情况下,可以通过某种配置来实现,而不是在我的业务方法中插入过多的非相关代码。

这是受支持的,或者只是我需要手动创建新的跨度并通过它? 我期望在一个事务/方法中传播相同的其他线程。

您可以尝试以下任何一个:

在执行程序级别 - 配置
ContextPropagatingTaskDecorator

以处理该特定executor的线程之间的上下文传播。

在应用程序级别 - 尝试使用答案中解释的钩子

java spring-boot trace micrometer
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.