2

我们使用 log4j appender 从我们的 tomcat webapp 向 sentry 发送错误。这对于在请求的主线程中发生的错误非常有用——我们可以获得所有额外的 http 信息,如 url、请求参数、cookie、标头等。

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

4

1 回答 1

1

您可能正在使用该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);

        ...
    }
});
于 2016-10-27T20:51:09.690 回答