-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
log4j2 async 异步方式传播日志链路增强 #80
Comments
AsyncLoggerContextSelector 在 Log4j 2 中用于配置异步日志记录,确保所有记录器都是异步的。但是,当涉及到 MDC(Mapped Diagnostic Context)参数时,异步日志记录可能会遇到问题,因为 MDC 是线程局部的,而异步日志记录可能在不同的线程中处理日志事件。 |
AsyncLoggerContextSelector 是 Apache Log4j 2 中的一个组件,它用于异步处理日志事件。在 Log4j 2 中,异步日志记录是一种性能优化技术,它允许应用程序继续执行其任务,而日志事件的记录操作则在后台异步完成。 异步日志记录的工作原理是,应用程序将日志事件发送到一个内部队列,而不是直接写入到日志目标(如控制台、文件等)。然后,一个或多个后台线程从队列中取出这些事件,并执行实际的日志写入操作。这种方式可以显著减少日志记录对应用程序性能的影响,特别是在高负载情况下。 AsyncLoggerContextSelector 的作用包括:
|
通过设置系统属性 log4j2.contextSelector 为 org.apache.logging.log4j.core.async.AsyncLoggerContextSelector 来启用。这种方式使用了一个高性能的并发框架 Disruptor,并创建一个单独的线程来处理日志输出。 超出了 MDC 的边界,所以需要额外写逻辑来兼容处理。 |
经研究,无法将 trace 信息放置到 AsyncLoggerConfigDisruptor$Log4jEventWapper 对象中,也就是 contextData 为空,这个对象最终会把日志输出到终端。 |
可以从 message 处着手处理,比如重写message,将trace相关信息写入message当中。 |
No description provided.
The text was updated successfully, but these errors were encountered: