如何使用MDC实现日志链路跟踪
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容介绍了"如何使用MDC实现日志链路跟踪"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言原理
千家信息网最后更新 2025年11月07日如何使用MDC实现日志链路跟踪
本篇内容介绍了"如何使用MDC实现日志链路跟踪"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

前言
原理
实现
过滤器
logback.xml
返回体
效果日志
前言
在微服务环境中,我们经常使用Skywalking、CAT等去实现整体请求链路的追踪,但是这个整体运维成本高,架构复杂,我们来使用MDC通过Log来实现一个轻量级的会话事务跟踪功能。
原理
MDC org.sl4j.MDC其实内部就是ThreadLocal,MDC提供了put/get/clear等几个核心接口,用于操作ThreadLocal中的数据;ThreadLocal中的K-V,可以在logback.xml中声明,最终将会打印在日志中。
// java代码 MDC.put("userId","laker"); // logback.xml %X{userId}例如:
实现
整体流程如下:
用户登录系统,我们日志中记录userId:laker。
用户发起请求,一个请求中可能实际产生多个http请求,这里可以前端生成一个requestId
在返回体中,返回requestId。
研发运维人员,可以根据 userId和requestId去日志中捞请求链路。
过滤器
@Order(value = Ordered.HIGHEST_PRECEDENCE + 100) @Component @WebFilter(filterName = "MDCFilter", urlPatterns = "/*") public class MDCFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException { try { MDC.put("userId", "laker"); MDC.put("requestId", IdUtil.fastUUID()); } catch (Exception e) { // } try { filterChain.doFilter(httpServletRequest, httpServletResponse); } finally { MDC.clear(); } } }logback.xml
${LOG_HOME}/test.log true false %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} %line - %m%n ${LOG_HOME}/test.log.%d{yyyy-MM-dd} 15 ${log.pattern} %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} %line - %m%n
返回体
public class Response{ @ApiModelProperty(notes = "响应码,非200 即为异常", example = "200") private final int code; @ApiModelProperty(notes = "响应消息", example = "提交成功") private final String msg; @ApiModelProperty(notes = "响应数据") private final T data; @ApiModelProperty(notes = "请求id") private final String requestId; public Response(int code, String msg, T data) { this.code = code; this.msg = msg; this.data = data; this.requestId = MDC.get("requestId"); }
效果日志
响应
{ code: 200, msg: "", requestId: "74a269a8-3cb4-417e-853c-b968b77cce23" }日志
18:37:15.997 [http-nio-8080-exec-1] INFO [laker|90717490-5ef4-4e46-bc2c-605952fc3803] c.l.m.c.InfoController - [v2Map,17] - null 18:37:38.980 [http-nio-8080-exec-2] INFO [laker|82bde351-f86e-466f-97a0-c857a0c4c1c9] c.l.m.c.InfoController - [v2Map,17] - null 18:37:39.992 [http-nio-8080-exec-3] INFO [laker|74a269a8-3cb4-417e-853c-b968b77cce23] c.l.m.c.InfoController - [v2Map,17] - null
"如何使用MDC实现日志链路跟踪"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
日志
链路
跟踪
整体
内容
前言
原理
实际
效果
数据
更多
用户
知识
过滤器
复杂
实用
成功
学有所成
接下来
事务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发工程师证书样本
网络安全4月讲话
linux上数据库备份
dns服务器是什么系统
软件开发定制产品
公司微信无法访问服务器知乎
苏州c语言软件开发多少钱
卵巢肿瘤标志物数据库
谷歌服务器文件管理
服务器代理怎么做
网络技术有限公司支付
软件开发服务缴纳印花税吗
登录mysql数据库的程序
fm2016 数据库大小
服务器部署安卓原生环境
网络安全中网络运营者
哈尔滨百城网络技术有限公司
公司后台打不开数据库
本地数据库用户
国有银行软件开发总部
erp服务器安装
数据库问题及回答技巧
运营商的网络安全压力
苏州互联网软件开发哪家实惠
30岁开始学软件开发还来得及吗
成都学软件开发哪个学校好
苹果抹掉所有内容和设置无法联系服务器
软件开发项目甲方团队
我的世界服务器矿物追踪
重庆正规软件开发应用