From 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a Mon Sep 17 00:00:00 2001
From: xiejun <xiejun@vci-tech.com>
Date: 星期五, 01 十一月 2024 15:11:19 +0800
Subject: [PATCH] Revert "集成获取mdm分发通用数据格式接口集成"

---
 Source/BladeX-Tool/blade-starter-log/src/main/java/org/springblade/core/log/aspect/RequestLogAspect.java |  260 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 260 insertions(+), 0 deletions(-)

diff --git a/Source/BladeX-Tool/blade-starter-log/src/main/java/org/springblade/core/log/aspect/RequestLogAspect.java b/Source/BladeX-Tool/blade-starter-log/src/main/java/org/springblade/core/log/aspect/RequestLogAspect.java
new file mode 100644
index 0000000..1008b09
--- /dev/null
+++ b/Source/BladeX-Tool/blade-starter-log/src/main/java/org/springblade/core/log/aspect/RequestLogAspect.java
@@ -0,0 +1,260 @@
+/*
+ *      Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+package org.springblade.core.log.aspect;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springblade.core.launch.log.BladeLogLevel;
+import org.springblade.core.log.props.BladeRequestLogProperties;
+import org.springblade.core.tool.jackson.JsonUtil;
+import org.springblade.core.tool.utils.ClassUtil;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.core.tool.utils.WebUtil;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.core.MethodParameter;
+import org.springframework.core.io.InputStreamSource;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.context.request.WebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.lang.reflect.Method;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Spring boot 鎺у埗鍣� 璇锋眰鏃ュ織锛屾柟渚夸唬鐮佽皟璇�
+ *
+ * @author L.cm
+ */
+@Slf4j
+@Aspect
+@AutoConfiguration
+@AllArgsConstructor
+@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
+@ConditionalOnProperty(value = BladeLogLevel.REQ_LOG_PROPS_PREFIX + ".enabled", havingValue = "true", matchIfMissing = true)
+public class RequestLogAspect {
+
+	private final BladeRequestLogProperties properties;
+
+	/**
+	 * AOP 鐜垏 鎺у埗鍣� R 杩斿洖鍊�
+	 *
+	 * @param point JoinPoint
+	 * @return Object
+	 * @throws Throwable 寮傚父
+	 */
+	@Around(
+		"execution(!static org.springblade.core.tool.api.R *(..)) && " +
+			"(@within(org.springframework.stereotype.Controller) || " +
+			"@within(org.springframework.web.bind.annotation.RestController))"
+	)
+	public Object aroundApi(ProceedingJoinPoint point) throws Throwable {
+		BladeLogLevel level = properties.getLevel();
+		// 涓嶆墦鍗版棩蹇楋紝鐩存帴杩斿洖
+		if (BladeLogLevel.NONE == level) {
+			return point.proceed();
+		}
+		HttpServletRequest request = WebUtil.getRequest();
+		String requestUrl = Objects.requireNonNull(request).getRequestURI();
+		String requestMethod = request.getMethod();
+
+		// 鏋勫缓鎴愪竴鏉¢暱 鏃ュ織锛岄伩鍏嶅苟鍙戜笅鏃ュ織閿欎贡
+		StringBuilder beforeReqLog = new StringBuilder(300);
+		// 鏃ュ織鍙傛暟
+		List<Object> beforeReqArgs = new ArrayList<>();
+		beforeReqLog.append("\n\n================  Request Start  ================\n");
+		// 鎵撳嵃璺敱
+		beforeReqLog.append("===> {}: {}");
+		beforeReqArgs.add(requestMethod);
+		beforeReqArgs.add(requestUrl);
+		// 鎵撳嵃璇锋眰鍙傛暟
+		logIngArgs(point, beforeReqLog, beforeReqArgs);
+		// 鎵撳嵃璇锋眰 headers
+		logIngHeaders(request, level, beforeReqLog, beforeReqArgs);
+		beforeReqLog.append("================   Request End   ================\n");
+
+		// 鎵撳嵃鎵ц鏃堕棿
+		long startNs = System.nanoTime();
+		log.info(beforeReqLog.toString(), beforeReqArgs.toArray());
+		// aop 鎵ц鍚庣殑鏃ュ織
+		StringBuilder afterReqLog = new StringBuilder(200);
+		// 鏃ュ織鍙傛暟
+		List<Object> afterReqArgs = new ArrayList<>();
+		afterReqLog.append("\n\n===============  Response Start  ================\n");
+		try {
+			Object result = point.proceed();
+			// 鎵撳嵃杩斿洖缁撴瀯浣�
+			if (BladeLogLevel.BODY.lte(level)) {
+				afterReqLog.append("===Result===  {}\n");
+				afterReqArgs.add(JsonUtil.toJson(result));
+			}
+			return result;
+		} finally {
+			long tookMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNs);
+			afterReqLog.append("<=== {}: {} ({} ms)\n");
+			afterReqArgs.add(requestMethod);
+			afterReqArgs.add(requestUrl);
+			afterReqArgs.add(tookMs);
+			afterReqLog.append("===============   Response End   ================\n");
+			log.info(afterReqLog.toString(), afterReqArgs.toArray());
+		}
+	}
+
+	/**
+	 * 婵�鍔辫姹傚弬鏁�
+	 *
+	 * @param point         ProceedingJoinPoint
+	 * @param beforeReqLog  StringBuilder
+	 * @param beforeReqArgs beforeReqArgs
+	 */
+	public void logIngArgs(ProceedingJoinPoint point, StringBuilder beforeReqLog, List<Object> beforeReqArgs) {
+		MethodSignature ms = (MethodSignature) point.getSignature();
+		Method method = ms.getMethod();
+		Object[] args = point.getArgs();
+		// 璇锋眰鍙傛暟澶勭悊
+		final Map<String, Object> paraMap = new HashMap<>(16);
+		// 涓�娆¤姹傚彧鑳芥湁涓�涓� request body
+		Object requestBodyValue = null;
+		for (int i = 0; i < args.length; i++) {
+			// 璇诲彇鏂规硶鍙傛暟
+			MethodParameter methodParam = ClassUtil.getMethodParameter(method, i);
+			// PathVariable 鍙傛暟璺宠繃
+			PathVariable pathVariable = methodParam.getParameterAnnotation(PathVariable.class);
+			if (pathVariable != null) {
+				continue;
+			}
+			RequestBody requestBody = methodParam.getParameterAnnotation(RequestBody.class);
+			String parameterName = methodParam.getParameterName();
+			Object value = args[i];
+			// 濡傛灉鏄痓ody鐨刯son鍒欐槸瀵硅薄
+			if (requestBody != null) {
+				requestBodyValue = value;
+				continue;
+			}
+			// 澶勭悊 鍙傛暟
+			if (value instanceof HttpServletRequest) {
+				paraMap.putAll(((HttpServletRequest) value).getParameterMap());
+				continue;
+			} else if (value instanceof WebRequest) {
+				paraMap.putAll(((WebRequest) value).getParameterMap());
+				continue;
+			} else if (value instanceof HttpServletResponse) {
+				continue;
+			} else if (value instanceof MultipartFile) {
+				MultipartFile multipartFile = (MultipartFile) value;
+				String name = multipartFile.getName();
+				String fileName = multipartFile.getOriginalFilename();
+				paraMap.put(name, fileName);
+				continue;
+			} else if (value instanceof MultipartFile[]) {
+				MultipartFile[] arr = (MultipartFile[]) value;
+				if (arr.length == 0) {
+					continue;
+				}
+				String name = arr[0].getName();
+				StringBuilder sb = new StringBuilder(arr.length);
+				for (MultipartFile multipartFile : arr) {
+					sb.append(multipartFile.getOriginalFilename());
+					sb.append(StringPool.COMMA);
+				}
+				paraMap.put(name, StringUtil.removeSuffix(sb.toString(), StringPool.COMMA));
+				continue;
+			} else if (value instanceof List) {
+				List<?> list = (List<?>) value;
+				AtomicBoolean isSkip = new AtomicBoolean(false);
+				for (Object o : list) {
+					if ("StandardMultipartFile".equalsIgnoreCase(o.getClass().getSimpleName())) {
+						isSkip.set(true);
+						break;
+					}
+				}
+				if (isSkip.get()) {
+					paraMap.put(parameterName, "姝ゅ弬鏁颁笉鑳藉簭鍒楀寲涓簀son");
+					continue;
+				}
+			}
+			// 鍙傛暟鍚�
+			RequestParam requestParam = methodParam.getParameterAnnotation(RequestParam.class);
+			String paraName = parameterName;
+			if (requestParam != null && StringUtil.isNotBlank(requestParam.value())) {
+				paraName = requestParam.value();
+			}
+			if (value == null) {
+				paraMap.put(paraName, null);
+			} else if (ClassUtil.isPrimitiveOrWrapper(value.getClass())) {
+				paraMap.put(paraName, value);
+			} else if (value instanceof InputStream) {
+				paraMap.put(paraName, "InputStream");
+			} else if (value instanceof InputStreamSource) {
+				paraMap.put(paraName, "InputStreamSource");
+			} else if (JsonUtil.canSerialize(value)) {
+				// 鍒ゆ柇妯″瀷鑳借 json 搴忓垪鍖栵紝鍒欐坊鍔�
+				paraMap.put(paraName, value);
+			} else {
+				paraMap.put(paraName, "姝ゅ弬鏁颁笉鑳藉簭鍒楀寲涓簀son");
+			}
+		}
+		// 璇锋眰鍙傛暟
+		if (paraMap.isEmpty()) {
+			beforeReqLog.append("\n");
+		} else {
+			beforeReqLog.append(" Parameters: {}\n");
+			beforeReqArgs.add(JsonUtil.toJson(paraMap));
+		}
+		if (requestBodyValue != null) {
+			beforeReqLog.append("====Body=====  {}\n");
+			beforeReqArgs.add(JsonUtil.toJson(requestBodyValue));
+		}
+	}
+
+	/**
+	 * 璁板綍璇锋眰澶�
+	 *
+	 * @param request       HttpServletRequest
+	 * @param level         鏃ュ織绾у埆
+	 * @param beforeReqLog  StringBuilder
+	 * @param beforeReqArgs beforeReqArgs
+	 */
+	public void logIngHeaders(HttpServletRequest request, BladeLogLevel level,
+							  StringBuilder beforeReqLog, List<Object> beforeReqArgs) {
+		// 鎵撳嵃璇锋眰澶�
+		if (BladeLogLevel.HEADERS.lte(level)) {
+			Enumeration<String> headers = request.getHeaderNames();
+			while (headers.hasMoreElements()) {
+				String headerName = headers.nextElement();
+				String headerValue = request.getHeader(headerName);
+				beforeReqLog.append("===Headers===  {}: {}\n");
+				beforeReqArgs.add(headerName);
+				beforeReqArgs.add(headerValue);
+			}
+		}
+	}
+
+}

--
Gitblit v1.9.3