MDC And NDC

序言

  • log4j是apache实现的一个开源日志组件(Wrapped implementations)
  • logback是slf4j的原生实现(Native implementations)

slf4j是Java简单日志的门面(The Simple Logging Facade for Java),如果使用slf4j日志门面,必须要用到slf4j-api.

logback是直接实现的,所以不需要其他额外的转换以及转换带来的消耗,而slf4j要调用log4j的实现,就需要一个适配层,将log4j的实现适配到slf4j-api可调用的模式
 

MDC与NDC

他们主要思路就是在执行线程中放置上下文信息,这个上线文信息一般具有唯一性 用来追踪 跨线程,跨服务的业务流程.然后我们根据这个唯一变量来搜索日志,以展现该业务的完整流程.

MDC与NDC的线程独立的,子线程会从父线程拷贝上下文(具体时间跟ThreadLocal是一样的cuiyaonan2000@163.com)

MDC

内部是Map的key ,value的方式实现

  1. 保存信息到上下文 MDC.put(key, value);
  2. 从上下文获取设置的信息 MDC.get(key);
  3. 清楚上下文中指定的key的信息 MDC.remove(key);
  4. 清除所有 clear()
  5. 输出模板,注意是大写[%X{key}]: log4j.appender.consoleAppender.layout.ConversionPattern = %-4r [%t] %5p %c %x - %m - %X{key}%n
  6. %X :后面不带{key} 则是输出全部

NDC

内部数据结构师栈,实现方式还是MDC

  1. 开始调用 NDC.push(message);
  2. 删除栈顶消息 NDC.pop();
  3. 清除全部的消息,必须在线程退出前显示的调用,否则会导致内存溢出。 NDC.remove();
  4. 输出模板,注意是小写的[%x] log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ssS}] [%x] : %m%n
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuiyaonan2000

给包烟抽吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值