logback的MDC机制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logback的MDC机制相关的知识,希望对你有一定的参考价值。
参考技术A MDC(Mapped Diagnostic Context,映射调试上下文),即将一些运行时的上下文数据通过logback打印出来,是 一种方便在多线程条件下记录日志的功能。和SiftingAppender一起,可以实现根据运行时的上下文数据,将日志保存到不同的文件中。 第一次logback.xml文件没有配置layout,因为只想写入kafka中的数据,不想加多余的东西,导致测试内容没能写入文件,加上之后就OK了
对外接口,就是对参数进行校验,然后调用MDCAdapter的方法实现。
LogbackMDCAdapter类实现MDCAdapter接口,实现 put、get、remove等方法。
copyOnThreadLocal:存储每个线程的多个变量
当在logback.xml中配置了%Xkey 或 SiftingAppender的<discriminator>的<key>,在需要输出日志的时候,从MDC中获取对应的key值,然后append到日志字符串中或生成文件路径,然后输出。
在每个线程Thread内部有一个ThreadLocal.ThreadLocalMap类型的成员变量threadLocals,这个threadLocals就是用来存储实际的变量副本的,键值为当前ThreadLocal变量,value为变量副本(即T类型的变量)。
初始时,在Thread里面,threadLocals为空,当通过ThreadLocal变量调用get()方法或者set()方法,就会对Thread类中的threadLocals进行初始化,并且以当前ThreadLocal变量为键值,以ThreadLocal要保存的副本变量为value,存到threadLocals。
ThreadLocal类:
1.实际的通过ThreadLocal创建的副本是存储在每个线程自己的threadLocals中的;
2.为何threadLocals的类型ThreadLocalMap的键值为ThreadLocal对象,因为每个线程中可有多个threadLocal变量
以上是关于logback的MDC机制的主要内容,如果未能解决你的问题,请参考以下文章
Logback+Spring-Aop实现全面生态化的全链路日志追踪系统服务插件「Logback-MDC篇」