我正在使用 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
如您所见,data1和data2(在主线程中设置)仅在主线程日志中可用,而data3(在http线程中设置)在由该线程生成的所有其他http线程中可用。网络服务器。
如何将 MDC 数据从主线程传递到这些 Web 服务器 http 线程?
我找到了大量有关将 MDC 数据传递到异步线程的文档,但这不适用于我的场景。
我正在使用 Spring Boot 和日志框架 SLF4J。任何建议或见解将不胜感激。
您需要创建自己的处理程序来实现
HandlerInterceptor
并在 preHandle
中设置 MDC 上下文。
没有通用的方法可以让所有线程使用您的 MDC 上下文,除非您想参与运行时代码操作的黑暗魔法。