我们使用 log4j 附加程序从 Tomcat Web 应用程序向 Sentry 发送错误。这对于请求主线程中发生的错误非常有效——我们可以获得所有额外的 http 信息,如 url、请求参数、cookie、 header 等。
但是我们的一些请求会产生其他线程来使用 org.springframework.core.task.TaskExecutor.execute() 来执行任务。当我们在这些线程中记录错误时,我们在 Sentry 中获得的信息非常少。无论如何,是否可以将父线程的上下文附加到错误中?
最佳答案
您可能正在使用MDC
工具来添加此额外信息。 MDC 信息存储在 ThreadLocal 存储中,这意味着它仅可供与存储绑定(bind)的线程使用。
确保额外信息可用的一种方法是,通过将上下文映射传递给子线程,确保生成任务的线程的 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);
...
}
});
关于java - 从另一个线程向 Sentry 添加http请求信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40293703/