LOG4J2-MDC-全链路跟踪等功能研究

Posted 流子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LOG4J2-MDC-全链路跟踪等功能研究相关的知识,希望对你有一定的参考价值。

MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 、logback及log4j2 提供的一种方便在多线程条件下记录日志的功能。MDC 可以看成是一个与当前线程绑定的哈希表,内部是基于threadLocal实现,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当开启isThreadContextMapInheritable属性后,当前线程的子线程会继承其父线程中的 MDC 的内容。当需要记录日志时,日志框架会自动从 MDC中获取所需的信息,MDC 的内容需要由程序在适当的时候保存进去。

MDC能满足如下需求:

  1. 在做日志链路跟踪时,如何在多线程之间进行上下文传递
  2. 生产环境中,如何让某个玩家ID或者ID列表打印出DEBUG日志,其他玩家还是INFO
  3. 生产环境中,如何让某个玩家ID或者ID列表的日志打印到独立的文件

背景:
项目中使用log4j2作为日志系统,然而在高并发的情况下,多个玩家的请求的日志链路参杂在一起,要跟踪某个用户一次的请求操作所有日志是很麻烦的,要根据不同玩家打印不同级别的根本就是做不到的。
log4j2 的MDC ThreadContext 和CloseableThreadContext 就提供了相关功能,

API说明:

clear() 

以上是关于LOG4J2-MDC-全链路跟踪等功能研究的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot+MDC实现全链路调用日志跟踪,这才叫优雅!

Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅。。

Spring Boot + MDC 实现全链路调用日志跟踪

SpringBoot中如何实现全链路调用日志跟踪?这方法才优雅!

Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅。。

微服务全链路跟踪:jaeger集成grpc