MDC日志追踪(一)介绍

一、背景

在排查问题时,如果只根据关键字搜索,可能不精准,比如根据userId搜索,但是这个userId访问的记录也很多,很难定位出问题的是哪一次的;比如根据其他关键字搜索如orderId,可能很多用户都访问了这个模块,很难定位是哪个用户出问题了;而把多个条件整合在一块,日志不规范比如不是所有日志都打印了这两个参数,则排查方向很不明确。

这时需要追踪整个调用链路,除了一些三方工具,追踪的方法也可以自定义实现:

(1)后端添加一个过滤器处理traceId,对每个请求创建一个唯一的id(这里命名为traceId),

       (第一次)判断为空则生成一个再存起来。至于存在哪里?如果存在request对象中,和业务

        耦合太深了,每个entry point入口(controler接口)都要加上request,  且要传给业务服务。   

所以有了MDC,MDC是一个在 Java 项目中用于日志跟踪的工具,它允许你在多线程环境下关联和传递特定的上下文信息。

(2)每次打印日志也打印这个traceId,如果硬编码,代码风格会很难看

   

    仍然可以通过MDC来解决这个问题。

(3)在filter中通过HttpServletResponse塞到header中返回给前端,这样就可以在控制台拿到这个

        traceId,去追踪后端日志了。

二、MDC

1、简介

MDC(Mapped Diagnostic Context)是一个线程本地的、可维护的、可传递的上下文环境。在 Java 中,MDC 主要用于在应用程序的不同组件之间传递日志上下文信息,例如用户会话 ID、请求 ID、用户身份信息等。MDC 让你可以将这些信息关联到特定的日志事件中,以便后续的日志处理器(如日志输出器)能够在日志中显示或处理这些信息。

这样,通过 MDC,可以在日志中记录和传递特定的上下文信息,从而更好地理解和分析应用程序的日志。

2、作用

(1)跟踪日志上下文信息: MDC 允许你在日志中添加额外的上下文信息,帮助理解日志事件发生的背景和环境。
(2)诊断和调试: 在多线程环境中,使用 MDC 可以将特定的上下文信息关联到日志中,有助于排查问题和调试程序。
(3)日志过滤和路由: MDC 中的上下文信息可以被日志处理器用来过滤、路由或分类日志事件,例如基于用户会话 ID 将日志事件路由到特定的日志文件或系统。

3、原理

MDC 的实现原理通常基于线程本地变量(ThreadLocal)。详情参考【多线程】ThreadLocal 详解每个线程都有自己的 MDC,线程在处理请求时可以将上下文信息设置到 MDC 中,这些信息会和该线程相关联。当日志事件发生时,日志框架会从 MDC 中获取相应的上下文信息,并将其包含在日志中。

三、使用方法

在 Java 中,常见的日志框架(如 Logback、Log4j2)都支持 MDC。

1、配置日志框架
2、设置上下文信息

 在代码中,当需要记录日志时,可以通过代码将相关的上下文信息设置到 MDC 中。例如,在请求开始时,你可以设置用户会话 ID:

import org.slf4j.MDC;// 设置用户会话 ID 到 MDC
MDC.put("sessionId", sessionId);
3、记录日志

当需要记录日志时,日志框架会自动将 MDC 中的上下文信息包含到日志中。你可以在日志消息中使用占位符来引用 MDC 中的上下文信息,具体使用方式取决于日志框架和日志输出格式。

只要代码中有 MDC.put操作,日志配置文件都可以直接使用这个key。

4、清除上下文信息

当请求处理结束后,记得清除 MDC 中的上下文信息,以免影响后续请求的日志记录:

// 清除 MDC 中的上下文信息
MDC.clear();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1534422.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

wifi贴码推广能赚钱吗?wifi贴码怎么跟商家沟通?

大家好,我是鲸天科技千千,大家都知道我是做开发的,平时会给大家分享一些互联网相关的创业项目和网络技巧,感兴趣的可以给我点个关注。 最近WiFi这个项目很多朋友来问我,我是前两年就接触过这个,所以比较了…

“孪舟”引擎V5.0:更有颜、更真实、更智能、更灵活、更强大

在9月6日智汇云舟2024视频孪生产品发布会上,我们向线上线下嘉宾展示了基于视频孪生技术的众多产品,以及前沿技术。我们的目标是依托自研3DGIS引擎,将视频、AI、IoT等多种技术深度融合,升级数字孪生为视频孪生,实时实景…

《Putty 的下载和安装步骤》

Putty 是一款免费开源的 SSH 和 Telnet 客户端,它主要用于远程登录和管理其他计算机或服务器。 1.Putty 的一些主要特点和优势: 1. 简单易用:它具有直观的用户界面,操作相对简单,即使对于不太熟悉技术的用户也能轻松上手。 2. 支持多种协议:除了 SSH(Secure Shell)…

「漏洞复现」紫光电子档案管理系统 selectFileRemote SQL注入漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

亚马逊跨境新手小白如何选品?实操带练教程

选产品和找供应,是每个跨境人不可避免的,但是盲目的选品,无疑是大海捞针。最近我发现一个宝藏工具-店雷达,它可以帮助你选品的同时,同时还能为你筛选供应商。 我就分享一下我用店雷达的选品方法和思路,大家…

【TPAMI 2024】竟能如此丝滑的过渡,从2D生成对抗网络数据逐步学习3D重建网络!

题目:Progressive Learning of 3D Reconstruction Network From 2D GAN Data 从2D生成对抗网络数据逐步学习3D重建网络 作者:Aysegul Dundar; Jun Gao; Andrew Tao; Bryan Catanzaro ** 关注公众号:AI前沿速递,获取更多优质资源…

NV080D语音芯片赋能电子秤一体机人机交互新革新

随着科技的飞速发展,零售业正经历着前所未有的变革。九芯作为行业的领跑者,推出了革命性的NV080D语音芯片,为超市、水果店、熟食店、麻辣烫店等零售业态带来了智能化的全新体验。 NV080D语音芯片在电子秤上的应用,主要是为了提高检…

[ComfyUI]Flux:写真新篇章!字节PuLID率先开启一致性风格迁移,无损画手和优质画面保持

前言 Flux:PuLID率先开启F1写真新篇章 所有的AI设计工具,模型和插件,都已经整理好了,👇获取~ Flux PuLID简介 在Flux出来后短时间内,社区生态反响和发展足够的迅猛快速。至今为止,社区LORA模…

c++面试-语法糖(一)

c面试-语法糖(一) 1、const关键字的作用?(变量,参数,返回值) 定义常量值:const 可以用于定义常量变量,其值在初始化后不能被修改。 const int MAX_SIZE 100;修饰指针:const 可以修饰指针,表示…

69、Python番外篇:从编程范式看如何学习一门编程语言的精髓

引言 在之前的文章中,我们曾聊过如何学习一门编程语言,当时是从程序的构成的角度来分析、展开的,主要提及了数据的表达 数据的处理,也就是数据结构 算法的内容。这个角度对应到所有编程语言,基本都是适用的。但是&a…

负载均衡:从理论到实践 ---day04

负载均衡 负载均衡1.什么是负载均衡2.负载均衡的分类硬件负载均衡软件负载均衡选择 3.引入负载均衡的好处 第一个Ribbon实例步骤1:步骤2:步骤3:步骤4: 问题1. 负载均衡的主要目标是什么?2. 负载均衡器的作用是什么&…

网络安全 DVWA通关指南 DVWA SQL Injection (Blind SQL盲注)

DVWA SQL Injection (Blind) 文章目录 DVWA SQL Injection (Blind)Low布尔盲注时间盲注sqlmap MediumHighImpossible 参考文献 WEB 安全靶场通关指南 Low 0、分析网页源代码 <?phpif( isset( $_GET[ Submit ] ) ) {// Get input$id $_GET[ id ];// Check database$geti…

鸿蒙HarmonyOS开发:一次开发,多端部署(界面级)天气应用案例

文章目录 一、布局简介二、典型布局场景三、侧边栏 SideBarContainer1、子组件2、属性3、事件 四、案例 天气应用1、UX设计2、实现分析3、主页整体实现4、具体代码 五、运行效果 一、布局简介 布局可以分为自适应布局和响应式布局&#xff0c;二者的介绍如下表所示。 名称简介…

DSLogic 逻辑分析仪的使用-I2C协议

一、I2C IIC-BUS&#xff08;Inter-IntegratedCircuit Bus&#xff09;最早是由PHilip半导体&#xff08;现在被NXP收购&#xff09;于1982年开发。 主要是用来方便微控制器与外围器件的数据传输。 它是一种半双工&#xff0c;由SDA&#xff08;数据&#xff09;和SCL&#xf…

MicroPython 片上psrom的支持,并将多个bin合成为一个bin

前两天在github上下载的MicroPython 版本1.20.0&#xff0c;怎么配置都无法开启片上psrom的支持&#xff0c;折腾了一周&#xff0c;都自我怀疑了&#xff0c;最后更新版本为1.23.0一编译直接就过了。。。下面记录下过的&#xff0c;过程&#xff0c;这边使用的是四线SPI的片上…

我平时是怎么找客户的?今天我的实战技巧,分享给大家

我常用的几个方法 1、利用WhatsApp&#xff0c;找客户的号码&#xff0c;去进行营销 学会这个方法&#xff0c;WhatsApp账号都能被你找到http://mp.weixin.qq.com/s?__bizMzg2MTcxNzAwMg&mid2247498845&idx1&sn039a87d60094cf6c166e2cf5e1f94a69&chksmce106…

【黑神话】无脑过大头怪(幽魂)教程,手残也能打过关!

在《黑神话悟空》这款扣人心弦的动作角色扮演游戏中&#xff0c;玩家将面对众多考验操作与策略的Boss战。其中&#xff0c;大头幽魂作为玩家早期就会遇到的挑战之一&#xff0c;其独特的战斗机制和技能组合&#xff0c;对新手玩家而言无疑是一次不小的考验。今天&#xff0c;就…

【附源码】用Python开发一个音乐下载工具,并打包EXE文件,所有音乐都能搜索下载!

现在听个歌&#xff0c;不是要这就是要那&#xff0c;乱七八糟的&#xff0c;下软件都下不赢。 于是决定加班熬夜来做一个&#xff0c;想怎么听就怎么听&#xff0c;大家自己看到就好&#xff0c;悄悄用&#xff0c;别告诉别人哈~ 好了不闲聊&#xff0c;开整&#xff01; 首先…

Element-ui el-table 全局表格排序

实现效果如下&#xff1a; 一、当页数据排序 如果只想要当前页面排序&#xff0c;只会涉及到前端&#xff0c;只需在<el-table-column>标签上添加 :sortable"true"即可 二、自定义排序 如果想要全局排序&#xff0c;需要自定义排序函数&#xff0c;请求后台排…

如何进行大模型训练和微调?(实战)

1、在项目中&#xff0c;如果prompt和function calling足够好&#xff0c;尽量不要微调&#xff0c;节约成本。 以下是针对function calling的slot&#xff0c;评估准确率&#xff08;识别准确度&#xff09;、召回率&#xff08;全面率&#xff09;&#xff0c;F1值。 从中可以…