如何将MDC数据从主线程传递到Web服务器http线程

问题描述 投票:0回答:1

我正在使用 Spring Boot 和 MDC 来记录 REST API 应用程序中每个日志条目的附加上下文。我在主线程中使用 MDC,但数据不会传递到通过 REST 控制器创建的 http 线程(由 Web 服务器生成)。

这是我当前日志输出的简化示例:

> thread: main, data1: foo, data2: bar, data3: null, message: some log entry
> thread: main, data1: foo, data2: bar, data3: null, message: some other log entry
> thread: http-nio-1234-1, data1: null, data2: null, data3: foobar, message: some other log entry
> thread: http-nio-1234-2, data1: null, data2: null, data3: foobar, message: some other log entry

如您所见,data1data2(在主线程中设置)仅在主线程日志中可用,而data3(在http线程中设置)在由该线程生成的所有其他http线程中可用。网络服务器。

如何将 MDC 数据从主线程传递到这些 Web 服务器 http 线程?

我找到了大量有关将 MDC 数据传递到异步线程的文档,但这不适用于我的场景。

我正在使用 Spring Boot 和日志框架 SLF4J。任何建议或见解将不胜感激。

spring spring-boot tomcat slf4j mdc
1个回答
0
投票

您需要创建自己的处理程序来实现

HandlerInterceptor
并在
preHandle
中设置 MDC 上下文。

没有通用的方法可以让所有线程使用 MDC 上下文,除非您想参与运行时代码操作的黑暗魔法。

© www.soinside.com 2019 - 2024. All rights reserved.