一:引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
二:编写过滤器:
package com.example.demo.filter;import org.slf4j.MDC;
import org.springframework.util.StringUtils;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.UUID;public class FilterGobalTraceId implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化操作}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {try {HttpServletRequest httpRequest = (HttpServletRequest) request;String oldTraceId = httpRequest.getHeader("traceId");if(!StringUtils.isEmpty(oldTraceId)){MDC.put("traceId",oldTraceId);}else {// 生成唯一的traceIdMDC.put("traceId", generateTraceId());}chain.doFilter(request, response);} finally {// 清除MDC的traceId值,确保在请求结束后不会影响其他请求的日志MDC.remove("traceId");}}@Overridepublic void destroy() {// 清理操作}private String generateTraceId() {// 在此处生成唯一的traceId,并返回return UUID.randomUUID().toString();}
}
三:配置过滤器注册ben,并把过滤器注册
package com.example.demo.filter;import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class GobalWebTraceIdConfig {@Beanpublic FilterRegistrationBean<FilterGobalTraceId> loggingFilter() {FilterRegistrationBean<FilterGobalTraceId> registrationBean = new FilterRegistrationBean<>();registrationBean.setFilter(new FilterGobalTraceId());registrationBean.addUrlPatterns("/*"); // 设置过滤的URL模式return registrationBean;}
}