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