瀏覽代碼

日志增加logTraceId

刘立冬 1 月之前
父節點
當前提交
6b7de62a48
共有 1 個文件被更改,包括 31 次插入20 次删除
  1. 31 20
      risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/aop/RequestLogAspect.java

+ 31 - 20
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/aop/RequestLogAspect.java

@@ -2,7 +2,9 @@ package com.tzld.piaoquan.risk.control.aop;
 
 import com.alibaba.fastjson.JSON;
 import com.google.common.base.Stopwatch;
+import com.tzld.piaoquan.risk.control.common.base.Constant;
 import com.tzld.piaoquan.risk.control.service.LoghubService;
+import org.apache.rocketmq.shaded.org.slf4j.MDC;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -17,6 +19,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
+import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
 @Aspect
@@ -38,25 +41,33 @@ public class RequestLogAspect {
     @Around("allController()")
     public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
         // 获取请求信息
-        HttpServletRequest request = Objects.requireNonNull((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
-        String uri = request.getRequestURI();
-        String clientIp = request.getRemoteAddr();
-        String queryString = request.getQueryString();
-        String method = joinPoint.getSignature().getName();
-        Stopwatch stopwatch = Stopwatch.createStarted();
-        // 执行目标方法
-        Object result = joinPoint.proceed();
-        // 计算耗时
-        long executionTime = stopwatch.stop().elapsed(TimeUnit.MILLISECONDS);
-        Map<String, Object> data = new HashMap<>();
-        data.put("uri", uri);
-        data.put("clientIp", clientIp);
-        data.put("method", method);
-        data.put("executionTime", executionTime);
-        data.put("queryString", queryString);
-        data.put("requestBody", JSON.toJSONString(joinPoint.getArgs()));
-        data.put("responseBody", JSON.toJSONString(result));
-        loghubService.asyncSubmitLog(aliyunLogProject, aliyunLogLogstoreRequest, "", data);
-        return result;
+        String traceId = UUID.randomUUID().toString();
+        MDC.put(Constant.LOG_TRACE_ID, traceId);  // 关键:让所有日志自动携带 traceId
+        try {
+            HttpServletRequest request = Objects.requireNonNull((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+            String uri = request.getRequestURI();
+            String clientIp = request.getRemoteAddr();
+            String queryString = request.getQueryString();
+            String method = joinPoint.getSignature().getName();
+            Stopwatch stopwatch = Stopwatch.createStarted();
+            // 执行目标方法
+            Object result = joinPoint.proceed();
+            // 计算耗时
+            long executionTime = stopwatch.stop().elapsed(TimeUnit.MILLISECONDS);
+            Map<String, Object> data = new HashMap<>();
+            data.put("uri", uri);
+            data.put("clientIp", clientIp);
+            data.put("method", method);
+            data.put("executionTime", executionTime);
+            data.put("queryString", queryString);
+            data.put("logTraceId", traceId);
+            data.put("requestBody", JSON.toJSONString(joinPoint.getArgs()));
+            data.put("responseBody", JSON.toJSONString(result));
+            loghubService.asyncSubmitLog(aliyunLogProject, aliyunLogLogstoreRequest, "", data);
+            return result;
+        } finally {
+            // 确保在方法执行完毕后清除 traceId
+            MDC.clear();
+        }
     }
 }