Spring Boot - 利用MDC(Mapped Diagnostic Context)实现轻量级同步/异步日志追踪
import org.slf4j.MDC;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class LoggingFilter extends OncePerRequestFilter {
private static final String REQUEST_ID = "requestId";
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
try {
// 生成并设置requestId
String requestId = generateRequestId();
MDC.put(REQUEST_ID, requestId);
chain.doFilter(request, response);
} finally {
// 清除MDC
MDC.clear();
}
}
private String generateRequestId() {
// 这里可以实现自定义的ID生成逻辑
return "GENERATED-ID";
}
}
这段代码定义了一个过滤器,用于为每个请求生成并存储唯一的requestId,以便在日志中追踪。在请求处理完毕后,确保清除MDC的内容,避免内存泄漏。这是一个典型的使用MDC进行请求追踪的例子。
评论已关闭