对于每一个开发者来说,查询接口的执行日志都是一个高频操作。每当测试显示接口有问题时,我们就需要到服务器或日志系统中去检查错误的原因。一般情况下,我们会通过对应的关键字或者接口地址来查询接口报什么错误,但是这样带来了一个问题,就是我们可能会少记录或者忘记输入一些关键字,导致查询记录有点硬.那么有没有一种简单高效的方法,即使我们不在日志中打印任何关键字,系统也会自动生成一个关键字,让我们一次性查询到该接口的所有日志记录呢?MDCMDC是日志门面框架SLF4J提供的一个类,可以提供多线程情况下的日志功能。log4j、logback、log4j2都实现了这个类。MDC本质上可以看成是一个ThreadLocal,由于其线程安全的特性,可以让我们轻松安全的保存数据。MDC的主要API包括clear()、get()、put()、remove()等方法,简洁的API让我们很容易上手。使用方法1、修改日志打印格式以日志框架logback为例,在logback.log中找到日志打印规则的配置,博主这里演示,指定为reqId。<编码器><模式>-%X{reqId}%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%file:%line%msg%nUTF-82.添加过滤器MDCFilterps。也可以使用拦截器,效果是一样的。拦截各个接口。@Component@AllArgsConstructor@Order(Ordered.HIGHEST_PRECEDENCE)@Slf4jpublicclassMDCFilterimplementsFilter{@Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{}@OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChain链){try{//为每个请求接口生成一个requestIdStringrequestId=RandomUtil.randomNumbers(10);//这里的reqId是上面配置的,要保持一致MDC.put("reqId","reqId:"+requestId);链。doFilter(请求,响应);}最后{MDC.clear();}}@Overridepublicvoiddestroy(){}}经过两个简单的步骤,就配置好了。让我们来看看效果。@PostMapping(value="/mdcTest")publicResponseEntity