首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

操作日志追踪记录之MDC入门

MDC 的作用是解决这个问题。   MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。...当前线程的子线程会继承其父线程中的 MDC 的内容。当需要记录日志时,只需要从 MDC 中获取所需的信息即可。MDC 的内容则由程序在适当的时候保存进去。...MDC使用场景 MDC可以将一个处理线程中你想体现在日志文件中的数据统一管理起来,根据你的日志文件配置决定是否输出。   ...,结合grep命令能根据跟踪编号将本次的处理日志全部输出) MDC如何使用 MDC我个人会用AOP或Filter或Interceptor这类工具配合使用,获得你希望输出到日志的变量并调用MDC.put(...MDC.put("siteName" , "北京"); MDC.put("userName" , "userwyh"); TraceLogger. info("测试MDC打印一"

6.8K31

SpringBoot MDC全局链路解决方案

解决方案 LogBack这个日志框架提供了MDC( Mapped Diagnostic Context,映射调试上下文 ) 这个功能,MDC可以理解为与线程绑定的数据存储器。...数据可以被当前线程访问,当前线程的子线程会继承其父线程中MDC的内容。MDC 在 Spring Boot 中的作用是为日志事件提供上下文信息,并将其与特定的请求、线程或操作关联起来。...通过使用 MDC,可以更好地理解和分析日志,并在多线程环境中确保日志的准确性和一致性。此外,MDC 还可以用于日志审计、故障排查和跟踪特定操作的执行路径。...* * 全局唯一链路id */ public final static String TRACE_ID = "traceId"; } 自定义全局唯一拦截器 Filter是Java...那么这里我们使用它对请求做MDC赋值处理。

63430

SpringBoot + MDC 实现全链路调用日志跟踪

MDC 介绍 MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 、logback及log4j2 提供的一种方便在多线程条件下记录日志的功能。...MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当前线程的子线程会继承其父线程中的 MDC 的内容。...当需要记录日志时,只需要从 MDC 中获取所需的信息即可。MDC 的内容则由程序在适当的时候保存进去。对于一个 Web 应用来说,通常是在请求被处理的最开始保存这些数据。...API 说明 clear() => 移除所有 MDC get (String key) => 获取当前线程 MDC 中指定 key 的值 getContext() => 获取当前线程 MDCMDC...put(String key, Object o) => 往当前线程的 MDC 中存入指定的键值对 remove(String key) => 删除当前线程 MDC 中指定的键值对 MDC 使用 Constants.TRACE_ID

83151

我不是最后一个知道MDC的吧?

> submit(Runnable task) { return super.submit(getMDCTask(task,getThreadContext())); } 我看到使用了 MDC.java...键值对put到map里,底层大概是对map进行操作的,我们可以看到上面代码第18行, mdcAdapter.put(key, val);最终执行的是 org.slf4j.spi.MDCAdapter.java...MDC功能测验 以上,我们大致知道了MDC做了什么了。这仅仅是我们自己看了别人在项目代码里用MDC以及MDC的一点源码得到的一些信息。...而有了MDC,再配合linux的grep用关键字抽取日志,那就方便多了。MDC还挺棒的呢! 以上是通过项目里使用MDC,然后通过自己的小测验和简单的一点源码来对MDC有了一个初步的了解。...slf4j中MDC是什么鬼 MDC从使用方式上与我们常用的记录日志的方式有些不同,我对它的理解是MDC可以将一个处理线程中你想体现在日志文件中的数据统一管理起来,根据你的日志文件配置决定是否输出。

94420

MDC是什么鬼?用法、源码一锅端

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import java.util.UUID;...import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import java.util.UUID;...MDC 源码解读 解读源码之前,要提提 SLF4J,全称是 Simple Logging Facade for Java,翻译过来就是「一套简单的日志门面」。...LoggerFactory.getLogger(SimpleMDC.class) 其中 Logger 就来自于 SLF4J 的规范包,项目中一旦这样定义 Logger,在底层就可以无缝切换 logback、log4j 等日志组件啦,这或许就是 Java...在 Java 的世界里,应该都知道定义接口的目的:就是为了定义规范,让子类去实现。 MDCAdapter 就和 JDBC 的规范类似,专门用于定义操作规范。

3.8K40

SpringBoot+MDC实现全链路调用日志跟踪~

大家好,我是小富~ 前面有一篇文章简单的介绍过MDC,这次结合具体的案例、生产中的具体问题深入了解一下MDC。...MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。 当前线程的子线程会继承其父线程中的 MDC 的内容。...() :获取当前线程MDCMDC put(String key, Object o) :往当前线程的MDC中存入指定的键值对 remove(String key) :删除当前线程MDC中指定的键值对...将丢失,解决方式为重写线程池,对于直接new创建线程的情况不考略【实际应用中应该避免这种用法】,重写线程池无非是对任务进行一次封装 线程池封装类:ThreadPoolExecutorMdcWrapper.java...} } 说明: 继承ThreadPoolExecutor类,重新执行任务的方法 通过ThreadMdcUtil对任务进行一次包装 线程traceId封装工具类:ThreadMdcUtil.java

2.9K31

Spring Boot + MDC 实现全链路调用日志跟踪

写在前面 通过本文将了解到什么是MDCMDC应用中存在的问题、如何解决存在的问题 MDC介绍 简介: MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 、logback...MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当前线程的子线程会继承其父线程中的 MDC 的内容。...() => 获取当前线程MDCMDC put(String key, Object o) => 往当前线程的MDC中存入指定的键值对 remove(String key) => 删除当前线程MDC中指定的键值对...将丢失,解决方式为重写线程池,对于直接new创建线程的情况不考略【实际应用中应该避免这种用法】,重写线程池无非是对任务进行一次封装 线程池封装类:ThreadPoolExecutorMdcWrapper.java...      } } 说明: 继承ThreadPoolExecutor类,重新执行任务的方法 通过ThreadMdcUtil对任务进行一次包装 线程traceId封装工具类:ThreadMdcUtil.java

2.1K20

Spring Boot - 利用MDC(Mapped Diagnostic Context)实现轻量级同步异步日志追踪

Java中,常见的日志框架如Log4j、Logback和Log4j2都提供了对MDC的支持。 MDC的主要特点包括: 线程绑定的上下文信息: MDC允许在多线程环境中将上下文信息与线程相关联。...Slf4j 和 MDC **SLF4J(Simple Logging Facade for Java)**是一个日志门面框架,它提供了一种简单的方式来访问各种日志系统,例如Log4j、Logback、java.util.logging...对于大多数Java项目来说,使用SLF4J门面和logback作为底层的日志实现是一个非常常见的选择。这样做不仅提供了对日志功能的灵活控制,还能够保持与标准的Java日志习惯的兼容性。...; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target...线程MDC工具类 package com.artisan.boottrace.utils; import org.slf4j.MDC; import java.util.Map; import java.util.concurrent.Callable

11600

Spring Boot 之 MDC 实现全链路调用日志跟踪

通过本文将了解到什么是MDCMDC应用中存在的问题、如何解决存在的问题 MDC介绍 简介: MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 、logback...MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当前线程的子线程会继承其父线程中的 MDC 的内容。...() => 获取当前线程MDCMDC put(String key, Object o) => 往当前线程的MDC中存入指定的键值对 remove(String key) => 删除当前线程MDC中指定的键值对...将丢失,解决方式为重写线程池,对于直接new创建线程的情况不考虑【实际应用中应该避免这种用法】,重写线程池无非是对任务进行一次封装 线程池封装类:ThreadPoolExecutorMdcWrapper.java...} } 说明: 继承ThreadPoolExecutor类,重新执行任务的方法 通过ThreadMdcUtil对任务进行一次包装 线程traceId封装工具类:ThreadMdcUtil.java

87920
领券