SLF4J 提供了MDC ( Mapped Diagnostic Contexts )功能 DMC简单的可以理解为,日志增强 如果项目日志比较多,项目中多线程的应用比较多,那么多个线程交叉打印日志,日志文件的内容是混乱的。 DMC可以通过AOP/Filter/Interceptor等方式,在线程中增加辅助日志,我们可以线程中通过DMC.put(key, val)来插入值,然后在配置文件中...
看到这我们就大概知道了MDC的基本作用了,我们之前用日志框架都知道,有5种日志级别,trace、debug、info、warn、error,而MDC是对日志的扩展应用,它应该能够允许我们自定义想要展示在日志的信息,看上面的注释,我们应该能够了解到,MDC在多线程环境下有很大的用处,可以管理每个线程的日志。 好了,这些都是我们通过大致的浏...
MDC 全拼 Mapped Diagnostic Contexts,是SLF4J类日志系统中实现分布式多线程日志数据传递的重要工具(不同的系统有不同的实现方式,下文中会有介绍);同时,用户也可利用MDC将一些运行时的上下文数据打印出来。 2、应用 自定义日志输出内容:用户可以将某个或某些所有日志中都需要打印的字符串设置于MDC中,这样就不需要每次...
答案是可以的,基于slf4j的MDC,具体MDC原理各位看官自行百度 直接上代码 代码语言:javascript 复制 /** * Created by shengjk1 on 2017/11/30 */publicclassMain{protectedfinalstaticorg.slf4j.Logger logger=LoggerFactory.getLogger(Main.class);publicstaticvoidmain(String[]args){String[]destinations=ConfigManag...
MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 、logback及log4j2 提供的一种方便在多线程条件下记录日志的功能。MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当前线程的子线程会继承其父线程中的 MDC 的内容。当需要记录日志时,...
MDC是日志门面框架SLF4J提供的一个类,可以提供在多线程情况下记录日志的功能,log4j、logback、log4j2都有对这个类的实现。从本质上来说,MDC可以看作一个ThreadLocal,由于其线程安全的特性,可以让我们轻松安全的保存数据。MDC主要的API有clear()、get()、put()、remove()方法等,简洁的api让我们使用上手基本没...
初见MDC 前两天看项目中的代码,无意中看到一个自定义的线程池 MDCThreadExecutorextendsThreadPoolTaskExecutor 主要针对spring-context中的ThreadPoolTaskExecutor线程池进行了扩展,但也没做多少扩展,仅仅是引入了两个属性,如下: privateMap<String,String>threadContext;privateBooleanuseThreadContext;publicMap<String,String...
经常做线上问题排查的可能会有感受,由于日志打印一般是无序的,多线程下想要串行拿到一次请求中的相关日志简直是大海捞针。那么MDC是一种很好的解决办法。 SLF4J的MDC SLF4J 提供了MDC ( Mapped Diagnostic Contexts )功能,它的实现也是利用了 ThreadLocal 机制。在代码中,只需要将指定的值 put 到线程上下文的 Map...
MDC.remove("userId"); } } 在上面的代码中,我们在调用doSomething()方法时将请求ID和用户ID添加到了MDC中。在记录日志时,我们可以使用%X{requestId}和%X{userId}的方式引用这些信息。 最佳实践是使用SLF4J作为日志门面,这样就可以方便地切换不同的日志实现。在使用SLF4J时,需要注意以下几点: ...
SLF4J的MDC(Mapped Diagnostic Context)提供了一种在多线程环境下记录日志的方式。我们需要创建一个MDC来存储TraceId。 importorg.slf4j.MDC;publicclassTraceIdConfig{publicstaticfinalStringTRACE_ID_KEY="traceId";publicstaticvoidinitMdc(){MDC.put(TRACE_ID_KEY,TraceIdHolder.get());// 将TraceId放入MDC中}publ...