MDC的使用

MDC(Mapped Diagnostic Contexts)是用于多线程环境下日志追踪的一种技术,它在当前线程中存储键值对,并能被子线程继承。通过在日志记录时添加MDC中的信息,可以方便地追踪微服务间的调用日志。注意,使用线程池时需处理MDC信息的传递,以防止丢失。Log4J和LogBack支持MDC,配置logback.xml可定制日志格式,展示如UUID等唯一标识。
摘要由CSDN通过智能技术生成

介绍

MDC(Mapped Diagnostic Contexts) 映射调试上下文 ,用于多线程条件下追踪日志功能。

支持 Log4J和LogBack 两种日志框架

原理

MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当前线程的子线程会继承其父线程中的 MDC 的内容。当需要记录日志时,只需要从 MDC 中获取所需的信息即可。MDC 的内容则由程序在适当的时候保存进去。

微服务之间的调用,则需要上层服务在 header 中添加标识同请求一起传输过来。下层服务直接使用上层服务的标识,就可以将日志串联起来。

使用

依赖

支持 Log4J和LogBack 两种日志框架

<dependency>  
  <groupId>log4j</groupId>  
  <artifactId>log4j</artifactId>  
  <version>1.2.17</version>  
</dependency>  
<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>slf4j-log4j12</artifactId>  
    <version>1.7.21</version>  
</dependency>

java

MDC.put("uuid" , xxxx);//自定义唯一标识
MDC.clear();

logback.xml

//打印时,打印唯一标识,通过唯一标识定位线程日志
<pattern>%boldRed(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%level |) %msg | %X{uuid}\n\tat %boldMagenta(%class).%boldCyan(%method) \(%file:%line\) \)\n\</pattern>

注意事项

主线程中使用线程池会导致线程池中丢失MDC信息,需要重写线程池,把主线程的MDC信息写到子线程中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值