From 69a3c374ca3afb770e3b9ffcbdda07ce362cbf58 Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期五, 09 一月 2026 19:59:29 +0800
Subject: [PATCH] #

---
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/aspect/LogAspect.java |  264 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 264 insertions(+), 0 deletions(-)

diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/aspect/LogAspect.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/aspect/LogAspect.java
new file mode 100644
index 0000000..e840774
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/aspect/LogAspect.java
@@ -0,0 +1,264 @@
+package com.vincent.rsf.openApi.aspect;
+
+import com.alibaba.fastjson.JSON;
+import com.vincent.rsf.common.utils.Utils;
+import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.openApi.annotation.OperationLog;
+import com.vincent.rsf.openApi.entity.app.ApiForeignLog;
+import com.vincent.rsf.openApi.entity.dto.CommonResponse;
+import com.vincent.rsf.openApi.service.ApiForeignLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.Method;
+import java.rmi.NoSuchObjectException;
+import java.util.*;
+
+/**
+ * Created by Administrator on 2019-07-09.
+ */
+@Component
+@Aspect
+@Slf4j
+@Order(2)
+public class LogAspect {
+
+    // 鍙傛暟銆佽繑鍥炵粨鏋溿�侀敊璇俊鎭瓑鏈�澶т繚瀛橀暱搴�
+    private static final int MAX_LENGTH = 1000;
+    // 鐢ㄤ簬璁板綍璇锋眰鑰楁椂
+    private final ThreadLocal<Long> startTime = new ThreadLocal<>();
+
+    @Resource
+    private ApiForeignLogService apiForeignLogService;
+
+    public LogAspect() {
+    }
+
+    /**
+     * 鍒囧叆鐐�
+     * 鍖归厤controller鍖呭強鍏舵墍鏈夊瓙鍖呬笅鐨勬墍鏈夌被鐨勬墍鏈夋柟娉�
+     */
+    @Pointcut("execution(* com.vincent.rsf.openApi.controller..*.*(..))")
+    public void controllerPc() {
+    }
+
+    /**
+     * 鐜粫閫氱煡
+     * @param pjp ProceedingJoinPoint
+     * @return 鏂规硶缁撴灉
+     */
+    @Around("controllerPc()")
+    public Object around(ProceedingJoinPoint pjp) {
+        String methodName = pjp.getSignature().getName();
+        try {
+            ServletRequestAttributes attributes = Optional.ofNullable((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
+                    .orElseThrow(() -> new NoSuchObjectException("鍓嶇疆閫氱煡涓幏鍙栫殑 ServletRequestAttributes 瀵硅薄涓虹┖"));
+            HttpServletRequest request = attributes.getRequest();
+
+//            if("getToken".equals(methodName) || "getToken".equals(methodName))
+//                return pjp.proceed();
+
+            // 鍓嶇疆閫氱煡
+            log.info("------銆愬墠缃�氱煡銆�------");
+
+            // 璁板綍璇锋眰鍐呭
+            log.info("娴忚鍣ㄨ緭鍏ョ殑缃戝潃锛歿}", request.getRequestURL().toString());
+            log.info("HTTP_METHOD锛歿}", request.getMethod());
+            log.info("IP锛歿}", request.getRemoteAddr());
+            log.info("鎵ц鐨勪笟鍔℃柟娉曞悕锛歿}", pjp.getSignature().getDeclaringTypeName() + "." + pjp.getSignature().getName());
+            log.info("涓氬姟鏂规硶鑾峰緱鐨勫弬鏁帮細{}", Arrays.toString(pjp.getArgs()));
+
+            Object result = pjp.proceed();
+
+            // 鍚庣疆閫氱煡
+            log.info("------銆愬悗缃�氱煡銆�------");
+            log.info("{}鏂规硶鐨勮繑鍥炲�硷細{}", pjp.getSignature().getName(), result);
+
+            saveLog1(pjp, result, null);
+            return result;
+        } catch (Throwable e) {
+            // 寮傚父閫氱煡
+            log.error("------銆愬紓甯搁�氱煡銆�------");
+            log.error("{}鏂规硶寮傚父锛屽弬鏁帮細{}锛屽紓甯革細", pjp.getSignature().getName(), Arrays.toString(pjp.getArgs()), e);
+
+            saveLog1(pjp, null, (Exception) e);
+            return CommonResponse.error("鏈嶅姟鍣ㄥ鐞嗘暟鎹紓甯�");
+        } finally {
+            // 鏈�缁堥�氱煡
+            if(!methodName.isEmpty() && !"getRegistered".equals(methodName)){
+                log.info("------銆愭渶缁堥�氱煡銆�------");
+                log.info("{}鏂规硶鎵ц缁撴潫", pjp.getSignature().getName());
+            }
+        }
+    }
+
+    private void saveLog1(JoinPoint joinPoint, Object result, Exception e) {
+
+        ApiForeignLog record = new ApiForeignLog();
+        Long endTime = startTime.get();
+        record.setCreateTime(new Date());
+        // 璁板綍鎿嶄綔鑰楁椂
+        if (endTime != null) {
+            record.setSpendTime((int) (System.currentTimeMillis() - endTime));
+        }
+        record.setTimestamp(String.valueOf(endTime));
+//        // 璁板綍褰撳墠鐧诲綍鐢ㄦ埛id銆佺鎴穒d
+//        User user = getLoginUser();
+//        if (user != null) {
+//            record.setUserId(user.getId());
+//            record.setTenantId(user.getTenantId());
+//        }
+        // 璁板綍璇锋眰鍦板潃銆佽姹傛柟寮忋�乮p
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = (attributes == null ? null : attributes.getRequest());
+        if (request != null) {
+            record.setUrl(request.getRequestURI());
+//            record.setClientIp(IpTools.gainRealIp(request));
+        }
+        // 璁板綍寮傚父淇℃伅
+        if (e != null) {
+            record.setResult(0);
+            record.setErr(Utils.sub(e.toString(), MAX_LENGTH));
+        } else {
+            record.setResult(1);
+        }
+//        // 璁板綍鎿嶄綔鍔熻兘
+//        record.setNamespace(desc);
+//        // 璁板綍澶囨敞
+//        if (!Cools.isEmpty(ol.comments())) {
+//            record.setMemo(ol.comments());
+//        }
+        // 璁板綍璇锋眰鍙傛暟
+        record.setRequest(Utils.sub(Arrays.toString(joinPoint.getArgs()), MAX_LENGTH));
+        record.setResponse(Utils.sub(JSON.toJSONString(result), MAX_LENGTH));
+
+        apiForeignLogService.saveAsync(record);
+    }
+
+    /**
+     * 淇濆瓨鎿嶄綔璁板綍
+     */
+    private void saveLog(JoinPoint joinPoint, Object result, Exception e) {
+        // 璁板綍妯″潡鍚嶃�佹搷浣滃姛鑳姐�佽姹傛柟娉曘�佽姹傚弬鏁般�佽繑鍥炵粨鏋�
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+        if (null == method) {
+            return;
+        }
+        OperationLog ol = method.getAnnotation(OperationLog.class);
+        if (null == ol) {
+            return;
+        }
+        String desc = getDescription(method, ol);
+        if (Cools.isEmpty(desc)) {
+            return;
+        }
+
+        ApiForeignLog record = new ApiForeignLog();
+        Long endTime = startTime.get();
+        record.setCreateTime(new Date());
+        // 璁板綍鎿嶄綔鑰楁椂
+        if (endTime != null) {
+            record.setSpendTime((int) (System.currentTimeMillis() - endTime));
+        }
+        record.setTimestamp(String.valueOf(endTime));
+//        // 璁板綍褰撳墠鐧诲綍鐢ㄦ埛id銆佺鎴穒d
+//        User user = getLoginUser();
+//        if (user != null) {
+//            record.setUserId(user.getId());
+//            record.setTenantId(user.getTenantId());
+//        }
+        // 璁板綍璇锋眰鍦板潃銆佽姹傛柟寮忋�乮p
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = (attributes == null ? null : attributes.getRequest());
+        if (request != null) {
+            record.setUrl(request.getRequestURI());
+//            record.setClientIp(IpTools.gainRealIp(request));
+        }
+        // 璁板綍寮傚父淇℃伅
+        if (e != null) {
+            record.setResult(0);
+            record.setErr(Utils.sub(e.toString(), MAX_LENGTH));
+        } else {
+            record.setResult(1);
+        }
+        // 璁板綍鎿嶄綔鍔熻兘
+        record.setNamespace(desc);
+        // 璁板綍澶囨敞
+        if (!Cools.isEmpty(ol.comments())) {
+            record.setMemo(ol.comments());
+        }
+        // 璁板綍璇锋眰鍙傛暟
+        if (ol.param() && request != null) {
+            record.setRequest(Utils.sub(getParams(joinPoint, request), MAX_LENGTH));
+        }
+        // 璁板綍璇锋眰缁撴灉
+        if (ol.result() && result != null) {
+            record.setResponse(Utils.sub(JSON.toJSONString(result), MAX_LENGTH));
+        }
+        apiForeignLogService.saveAsync(record);
+    }
+
+    /**
+     * 鑾峰彇鎿嶄綔鍔熻兘
+     *
+     * @param method Method
+     * @param ol     OperationLog
+     * @return String
+     */
+    private String getDescription(Method method, OperationLog ol) {
+        if (!Cools.isEmpty(ol.value())) {
+            return ol.value();
+        }
+        return null;
+    }
+
+    /**
+     * 鑾峰彇璇锋眰鍙傛暟
+     *
+     * @param joinPoint JoinPoint
+     * @param request   HttpServletRequest
+     * @return String
+     */
+    private String getParams(JoinPoint joinPoint, HttpServletRequest request) {
+        String params;
+
+        Map<String, String> paramsMap = new HashMap<>();
+
+        Map<String, String[]> map = Collections.unmodifiableMap(request.getParameterMap());
+        for (Map.Entry<String, String[]> entry : map.entrySet()) {
+            paramsMap.put(entry.getKey(), Utils.join(entry.getValue(), ","));
+        }
+
+        if (paramsMap.keySet().size() > 0) {
+            params = JSON.toJSONString(paramsMap);
+        } else {
+            StringBuilder sb = new StringBuilder();
+            for (Object arg : joinPoint.getArgs()) {
+                if (null == arg
+                        || arg instanceof MultipartFile
+                        || arg instanceof HttpServletRequest
+                        || arg instanceof HttpServletResponse) {
+                    continue;
+                }
+                sb.append(JSON.toJSONString(arg)).append(" ");
+            }
+            params = sb.toString();
+        }
+        return params;
+    }
+
+}
\ No newline at end of file

--
Gitblit v1.9.1