浅谈MDC
MDC是什么?
MDC 全拼 Mapped Diagnostic Contexts,是SLF4J类日志系统中实现分布式多线程日志数据传递的重要工具;可利用MDC将一些运行时的上下文数据打印出来。目前只有log4j和logback提供原生的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来存放数据