本文主要是介绍Java中MDC是干嘛的,有什么作用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
说明:
MDC(Mapped Diagnostic Context,映射调试上下文)是 slf4j 提供的一种轻量级的日志跟踪工具。
Log4j、Logback或者Log4j2等日志中最常见区分同一个请求的方式是通过线程名,而如果请求量大,线程名在相近的时间内会有很多重复的而无法分辨,因此引出了trace-id,即在接收到的时候生成唯一的请求id,在整个执行链路中带上此唯一id.
MDC.java本身不提供传递traceId的能力,真正提供能力的是MDCAdapter接口的实现。
比如Log4j的是Log4jMDCAdapter,Logback的是LogbackMDCAdapter
一、使用MDC
1、普通使用 MDC
MDC.put("trace-id", "aa");String traceId = MDC.get("trace-id");
在日志配置文件中<pattern>节点中以%X{trace-id}取出,例如:
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%boldYellow(%15.15t)] [%X{Trace-Id}] [%X{Request-From}/%X{User-Id}] [%ip] %highlight(%-5level) %cyan(%-40.40logger{39}) - %msg%n</pattern>
2、上面方式,只能在当前线程中获取到值,因为 MDC 的实现原理就是基于 ThreadLocal,而 ThreadLocal 的主要作用就是只对当前线程有效
这篇关于Java中MDC是干嘛的,有什么作用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!