什么是日志MDC?一句话简单解释MDC

官方文档:Chapter 8: Mapped Diagnostic Context
为什么要写这篇文章呢?因为目前互联网上全是从官方文档里机器翻译然后转载的。但实际上我只是想知道什么是MDC,一句话解释一下MDC就可以了。
以下内容是我本人对MDC的简单总结

MDC的字面意思:Mapped Diagnostic Context 映射诊断上下文

通俗的说就是在打印日志的时候定义一个占位符%X{MDC键名称},然后在你自己写的代码中使用MDC.put("MDC键名称", "内容")方法给占位符赋值,在最终打印的时候,日志框架就会自动带上你指定的内容。(有点像字符串拼接)

MDC可以理解为一个map,只不过这个map的作用域是单个线程,且线程安全。

以下为一个最简单的例子:

java代码:

package top.milkbox.modular.customTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import top.milkbox.modular.controller.TestController;
/**
 * 创建时间: 2024-12-11 上午 11:38
 *
 * @author milkbox
 */
public class CustomTest {
 private static final Logger log = LoggerFactory.getLogger(TestController.class);
 public static void main(String[] args) {
 // 定义一个键值对,键名为custom.info,键值为王多鱼
 MDC.put("custom.info", "王多鱼");
 // 正常打印日志
 log.info("购买脂肪险,让王多鱼倾家荡产");
 // 设置打印格式为:%X{custom.info} - %m%n
 // 最终打印:王多鱼 - 购买脂肪险,让王多鱼倾家荡产
 }
}

日志配置文件logback.xml(对于如何使用日志的配置文件,我这里就不解释了)。这里重点注意:<pattern>%X{custom.info} - %m%n</pattern>。我们使用%X{MDC键名称}这个占位符来定义内容显示的位置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 <encoder>
 <!-- <pattern>${CONSOLE_LOG_PATTERN}</pattern> -->
 <!-- 使用:%X{MDC键名称}来显示内容 -->
 <pattern>%X{custom.info} - %m%n</pattern>
 <charset>utf-8</charset>
 </encoder>
 </appender>
 <root level="info">
 <appender-ref ref="STDOUT"/>
 </root>
 <logger name="top.milkbox" level="info" additivity="false">
 <appender-ref ref="STDOUT"/>
 </logger>
</configuration>

运行main函数,结果如下:

这是MDC最简单的用法,如果想看更详细的可以去官方文档学习。

作者:牛奶盒原文地址:https://www.cnblogs.com/milkbox/p/18599333

%s 个评论

要回复文章请先登录注册