so-*_*ude 3 logback mdc netty spring-boot distributed-tracing
Logback MDC(映射诊断上下文)正在利用 threadLocal(据我所知),以便可以在同一线程执行的所有日志语句上访问它。
我的问题是,logback MDC 是否可以在非阻塞 IO 服务器端运行时(如 Netty 或 Undertow)中工作,因为它曾经在例如 tomcat 中工作?如果是,它是如何工作的,因为 Netty/Undertow 不像 tomcat 那样遵循每个请求一个线程。
我正在尝试在 MDC 中放置一个 traceID,以便我可以在 Splunk/ELK 等集中式日志记录系统中跨多个微服务/管道侦听器的一个事务跟踪中跟踪我的所有日志
我对直接使用 netty 不是很熟悉,但我知道可以将 logback MDC 与异步代码一起使用。不过也不容易。
基本上,您需要以某种方式将 traceId 与请求/连接联系起来,并且每次开始处理该连接时,请在 MDC 中为当前线程设置 traceId。
如果您正在使用线程池,您可以使用自定义 Executor 从当前线程本地存储获取当前状态(例如 traceId),并创建一个包装的 Runnable 或 Callable,将线程本地存储设置为先前检索的值在运行之前。然后将包装好的 runnable 转发给委托 Executor。
你可以在这里看到这是如何完成的:https : //github.com/lucidsoftware/java-thread-context/blob/master/thread-context/src/main/java/com/github/threadcontext/PropagatingExecutorService.java
事实上,根据您的需要,您或许可以使用该 java-thread-context 项目。
| 归档时间: |
|
| 查看次数: |
1850 次 |
| 最近记录: |