gpt4 book ai didi

spring-boot - Netty 或任何其他非阻塞 IO 服务器上的 Logback MDC

转载 作者:行者123 更新时间:2023-12-04 01:02:05 30 4
gpt4 key购买 nike

Logback MDC(映射诊断上下文)正在利用 threadLocal(据我所知),以便在同一线程执行的所有日志语句上都可以访问它。

我的问题是,logback MDC 是否会像 Netty 或 Undertow 那样在非阻塞 IO 服务器端运行时中工作,因为它曾经在例如 tomcat 中工作?
如果是,它是如何工作的,因为 Netty/Undertow 不像 tomcat 那样遵循每个请求一个线程。

我正在尝试在 MDC 中放置一个 traceID,以便我可以在像 Splunk/ELK 这样的集中式日志记录系统中跨多个微服务/管道监听器的一个事务跟踪跟踪我的所有日​​志

最佳答案

我对直接使用 netty 不是很熟悉,但我知道可以将 logback MDC 与异步代码一起使用。不过这并不容易。

基本上,您需要以某种方式将 traceId 绑定(bind)到请求/连接,并且每次开始处理该连接时,在 MDC 中为当前线程设置 traceId。

如果您使用的是线程池,则可以使用自定义 Executor 执行此操作,该 Executor 从当前线程本地存储获取当前状态(例如 traceId),并创建一个包装的 Runnable 或 Callable 将线程本地存储设置为先前检索到的值在运行之前。然后将该包装的可运行文件转发给委托(delegate)执行器。

您可以在此处查看这是如何完成的:https://github.com/lucidsoftware/java-thread-context/blob/master/thread-context/src/main/java/com/github/threadcontext/PropagatingExecutorService.java

事实上,根据您的需要,您也许可以使用那个 java-thread-context 项目。

关于spring-boot - Netty 或任何其他非阻塞 IO 服务器上的 Logback MDC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58104396/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com