我们正在使用log4j附加程序将错误从tomcat Webapp发送到哨兵。这对于发生在请求主线程中的错误非常有用-我们获得了所有额外的http信息,例如url,请求参数,cookie,标头等。

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

最佳答案

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

        ...
    }
});

09-30 18:07
查看更多