从另一个线程向哨兵添加http请求信息

Add http request info to sentry from another thread

我们正在使用 log4j appender 从我们的 tomcat webapp 向哨兵发送错误。这对于在请求的主线程中发生的错误非常有效——我们获得了所有额外的 http 信息,如 url、请求参数、cookies、headers 等

但是我们的一些请求会产生其他线程来使用 org.springframework.core.task.TaskExecutor.execute() 做一些事情。当我们在这些线程中记录错误时,我们在哨兵中得到的信息很少。无论如何要将 parent 线程的上下文附加到错误?

您可能正在使用 MDC 工具来添加这些额外信息。 MDC 信息存储在 ThreadLocal 存储中,这意味着它仅可用于与存储绑定的线程。

确保额外信息可用的一种方法是通过将上下文映射传递给子线程,确保生成任务的线程的 MDC 信息在执行程序线程中可用。

// This is the parent (main thread)
final Map<String, String> contextMap = MDC.getCopyOfContextMap();

executorService.execute(new Task(contextMap) {
    public final void run() {
        // This is run by the child.
        MDC.setContextMap(contextMap);

        ...
    }
});