如何使用MDC实现日志链路跟踪
发表于:2025-02-09 作者:千家信息网编辑
千家信息网最后更新 2025年02月09日,本篇内容介绍了"如何使用MDC实现日志链路跟踪"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言原理
千家信息网最后更新 2025年02月09日如何使用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安全错误
数据库的锁怎样保障安全
怎样查找网络安全证书
服务器 e7
数据库临时文件
网络安全工程师的工作有哪些岗位
把网络安全作为最重要的
软件开发企业的销售数据来源
淘宝如何做到网络安全支付
数据库完整和安全性
江苏专业软件开发工程
三层网络安全搭建
数据库系统工程师第二版
电视台视频服务器
苹果软件开发者网站
河北珑皓互联网科技有限公司
南通软件开发入门教程
福建互联网展览科技馆设计
网络安全结构隐患
网络安全教育考试2020
陕西省文物资料数据库
网络安全读后感作文
电大计算机网络技术考数学吗
我的世界服务器网易
计算机网络技术网课说课
如何构建校园网络安全
软件开发工具特征
xcstar光盘数据库
域服务器防火墙
大连网络安全印证服务平台
万科公司软件开发
C语言中包括数据库吗