浅谈MDC

MDC是什么?

MDC 全拼 Mapped Diagnostic Contexts,是SLF4J类日志系统中实现分布式多线程日志数据传递的重要工具;可利用MDC将一些运行时的上下文数据打印出来。目前只有log4jlogback提供原生的MDC支持;

简单使用

MDC里面提供的都是静态方法,所以可以直接调用

// 设置一个key
MDC.put("name","灰色Code");

// 获取一个key的值
MDC.get("name");
    
// 删除一个key
MDC.remove("name");
    
// 清空MDC里的内容
MDC.clear();

// 获取上下文中的map
Map<String,String> map = MDC.getCopyOfContextMap();

// 设置MDC的map
MDC.setContextMap(map);

源码解析

MDC

通过阅读MDC的源码可以发现,它其实是调用了MDCAdapter的接口来实现的

图片

MDCAdapter

MDCAdapter接口有三个实现类,而MDC是调用了LogbackMDCAdapter里的方法(在MDC里有一个静态代码块,实例化了这个对象)

图片

LogbackMDCAdapter

LogbackMDCAdapter主要是用ThreadLocal在线程上下文中维护一个HashMap来实现的

图片

总结

怎么样,实现原理是不是很简单,就这么短短几行代码,就实现了听起来很高大上的MDC

所以简单来说,MDC就是利用ThreadLocal在线程中维护了一个HashMap,利用HashMap来存放数据