要求:将一次请求的所有日志添加唯一标识,方便过滤一次完整请求的日志
定义拦截器 继承 HandlerInterceptorAdapter
package com.csc.contact.ykcacccharge.LogBackMdc;
import org.slf4j.MDC;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.UUID;
public class LogInterceptor extends HandlerInterceptorAdapter {
private final static String REQUEST_ID = "REQUEST_ID";
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
MDC.remove(REQUEST_ID);
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String requestId = UUID.randomUUID().toString().replace("-", "");
MDC.put(REQUEST_ID, requestId);
return true;
}
}
监听所有请求 继承 WebMvcConfigurerAdapter
package com.csc.contact.ykcacccharge.LogBackMdc;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@ComponentScan(basePackageClasses={LogConfigDemo.class})
public class LogConfigDemo extends WebMvcConfigurerAdapter {
@Bean
public HandlerInterceptor logInterceptor() {
return new LogInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor()).addPathPatterns("/**");
super.addInterceptors(registry);
}
}
修改logback.xml 配置 增加%X{REQUEST_ID}
参数
<property name="file.pattern"
value="%d{YYYY-MM-dd HH:mm:ss.SSS} %X{REQUEST_ID} %property{app.name} [%thread] %-5level %logger{36}[%L] [TxId : %X{PtxId} , SpanId : %X{PspanId}]- %msg%n"/>
到此就完成了,可以直接通过**logger.info()**来测试了