You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别并记录并发API请求?Log4j请求追踪方案咨询

为Log4j日志添加请求追踪ID解决并发日志混乱问题

完全可以通过Log4j的**MDC(Mapped Diagnostic Context)**功能实现,这是专门解决多线程/并发场景下日志追踪问题的工具,核心是给每个请求绑定唯一ID,让同一条请求的所有日志都带上这个标识。

具体实现步骤:

  1. 在请求入口注入唯一请求ID到MDC
    在API的请求拦截器中生成唯一ID(比如UUID),并将其放入MDC中。以Spring Web项目为例,实现HandlerInterceptor:

    public class RequestIdInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            // 生成唯一请求ID
            String requestId = UUID.randomUUID().toString();
            // 存入MDC
            MDC.put("requestId", requestId);
            // 可选:把ID写入响应头,方便客户端关联请求
            response.setHeader("X-Request-ID", requestId);
            return true;
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            // 请求结束后清除MDC,避免线程复用导致ID串用(线程池场景必须做)
            MDC.remove("requestId");
        }
    }
    

    记得把这个拦截器注册到项目的Web配置中。

  2. 修改Log4j配置,输出时带上requestId
    在Log4j的格式配置里加入%X{requestId},这样每条日志都会自动带上MDC中存储的请求ID。

    • Log4j2 XML示例:
      <Appenders>
          <Console name="Console" target="SYSTEM_OUT">
              <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %X{requestId} - %msg%n"/>
          </Console>
      </Appenders>
      
    • Log4j Properties示例:
      log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %X{requestId} - %msg%n
      
  3. 关键注意事项

    • 务必在请求结束后清除MDC中的requestId:Web容器通常使用线程池复用线程,如果不清除,后续请求可能会继承前一个请求的ID,导致日志混乱。
    • 异步场景需手动传递MDC:如果API中有异步处理逻辑(比如@Async注解),异步线程不会自动继承父线程的MDC上下文,需要手动传递。示例:
      // 父线程中获取上下文
      Map<String, String> mdcContext = MDC.getCopyOfContextMap();
      // 异步线程中设置上下文
      CompletableFuture.runAsync(() -> {
          MDC.setContextMap(mdcContext);
          try {
              // 异步业务逻辑
          } finally {
              MDC.clear();
          }
      });
      

内容的提问来源于stack exchange,提问作者Jose Lizarraga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:05:21