SpringBoo利用 MDC 机制过滤出单次请求相关的日志,Spring Boot使用MDC机制实现单次请求日志过滤

马肤

温馨提示:这篇文章已超过453天没有更新,请注意相关的内容是否还可用!

Spring Boot利用MDC(Mapped Diagnostic Context)机制,通过为每个请求分配唯一的上下文ID,实现日志过滤。这种机制有助于快速定位单次请求相关的日志信息,提高问题排查效率。在应用程序运行过程中,MDC能够自动记录请求相关的上下文信息,并在日志输出时将其关联起来,方便开发者或运维人员通过简单的查询即可找到与特定请求相关的日志信息。这种日志管理方式提高了系统的可维护性和稳定性。

🏷️个人主页:牵着猫散步的鼠鼠

🏷️专栏系列:Java全栈专栏

SpringBoo利用 MDC 机制过滤出单次请求相关的日志,Spring Boot使用MDC机制实现单次请求日志过滤 第1张

🏷️个人学习笔记,如有疏漏,欢迎评论区指正

目录

1、引言:为什么需要MDC

服务出现故障时,我们经常需要获取一次请求流程里的所有日志进行定位,如果请求只在一个线程里处理,我们可以通过线程ID来过滤日志,当请求包含异步线程的处理时,光靠线程ID就显得捉襟见肘了,本文将介绍如何通过MDC(Mapped Diagnostic Context)来快速过滤一次数据上报请求的所有业务日志。

2、MDC是什么

MDC是SLF4J的一部分,主要用于日志记录的实用工具,它提供了线程级别的日志上下文信息管理功能,SLF4J本身是一个抽象层,允许我们在使用不同的日志框架(如log4j, logback等)时,保持统一的日志API,MDC主要在logback和log4j中使用。

SpringBoo利用 MDC 机制过滤出单次请求相关的日志,Spring Boot使用MDC机制实现单次请求日志过滤 第2张

MDC允许我们在一个线程的执行上下文中设置和获取键值对,这些键值对在日志输出中可以以占位符的形式被引用,从而在日志信息中输出这些上下文信息,这在Web应用中跟踪用户请求或在分布式系统中跟踪跨服务的事务中特别有用。

3、代码实战

通过上面的介绍,你可能对MDC有了基本的了解,但理论总是需要结合实际来加深理解,我们将通过实战来演示MDC的使用。

我们在主函数中设置MDC的值,并在多个线程中打印日志,你会发现,在主线程中可以正确打印出MDC的值,但在异步线程中却打印不出来,这是因为MDC是基于ThreadLocal实现的,只能在当前线程中有效。

为了解决这个问题,我们可以使用装饰器模式来创建一个MDCRunnable类,对Runnable接口进行一层装饰,在创建MDCRunnable类时保存当前线程的MDC值,在执行run()方法时再将保存的MDC值拷贝到异步线程中去,这样,在异步线程中也可以正确打印出MDC的值了。

SpringBoo利用 MDC 机制过滤出单次请求相关的日志,Spring Boot使用MDC机制实现单次请求日志过滤 第3张

4、总结

本文讲述了如何使用MDC工具来快速过滤一次请求的所有日志,并通过装饰器模式使得MDC工具在异步线程里也能生效,利用MDC结合AOP技术,可以快速地收集相关日志信息,提高开发效率和运维维护的速度,希望本文能对您有所启发和帮助。

我在修改时添加了一些分段和标题,以使文章结构更清晰易读,我也对部分内容进行了润色和修正,以提高文章的可读性和准确性。


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码