• springboot使用filter增加全局traceId,方便日志查找


    一:引入依赖

    1. <dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-web</artifactId>
    4. </dependency>

    二:编写过滤器:

    1. package com.example.demo.filter;
    2. import org.slf4j.MDC;
    3. import org.springframework.util.StringUtils;
    4. import javax.servlet.*;
    5. import javax.servlet.http.HttpServletRequest;
    6. import java.io.IOException;
    7. import java.util.UUID;
    8. public class FilterGobalTraceId implements Filter {
    9. @Override
    10. public void init(FilterConfig filterConfig) throws ServletException {
    11. // 初始化操作
    12. }
    13. @Override
    14. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    15. throws IOException, ServletException {
    16. try {
    17. HttpServletRequest httpRequest = (HttpServletRequest) request;
    18. String oldTraceId = httpRequest.getHeader("traceId");
    19. if(!StringUtils.isEmpty(oldTraceId)){
    20. MDC.put("traceId",oldTraceId);
    21. }else {
    22. // 生成唯一的traceId
    23. MDC.put("traceId", generateTraceId());
    24. }
    25. chain.doFilter(request, response);
    26. } finally {
    27. // 清除MDC的traceId值,确保在请求结束后不会影响其他请求的日志
    28. MDC.remove("traceId");
    29. }
    30. }
    31. @Override
    32. public void destroy() {
    33. // 清理操作
    34. }
    35. private String generateTraceId() {
    36. // 在此处生成唯一的traceId,并返回
    37. return UUID.randomUUID().toString();
    38. }
    39. }

    三:配置过滤器注册ben,并把过滤器注册

    1. package com.example.demo.filter;
    2. import org.springframework.boot.web.servlet.FilterRegistrationBean;
    3. import org.springframework.context.annotation.Bean;
    4. import org.springframework.context.annotation.Configuration;
    5. @Configuration
    6. public class GobalWebTraceIdConfig {
    7. @Bean
    8. public FilterRegistrationBean loggingFilter() {
    9. FilterRegistrationBean registrationBean = new FilterRegistrationBean<>();
    10. registrationBean.setFilter(new FilterGobalTraceId());
    11. registrationBean.addUrlPatterns("/*"); // 设置过滤的URL模式
    12. return registrationBean;
    13. }
    14. }

  • 相关阅读:
    关联规则算法Apriori algorithm详解以及为什么它不适用于所有的推荐系统
    Java 并发编程
    数据可视化复习 第四章
    Maven
    newspringboot
    点云拟合平面原理和实现(Halcon)
    C++第十单元 查找与检索10.1 顺序查找10.2 二分查找
    中国大学科技园联盟携优积科技走进晋江 探索校地双向赋能新路径
    P2895 [USACO08FEB]Meteor Shower S
    uniapp/微信小程序 项目day03
  • 原文地址:https://blog.csdn.net/qq_36881106/article/details/132830193