From 9e1a48e908b47ba7c4ae39298e9d4c8257b0ddf8 Mon Sep 17 00:00:00 2001 From: yovinchen Date: Thu, 18 Jan 2024 18:02:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20member=20=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=8E=AF=E7=BB=95=E6=97=A5=E5=BF=97=E3=80=81=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=8F=B7=E6=A0=87=E8=AF=86=E3=80=81aop=E6=A1=86?= =?UTF-8?q?=E6=9E=B6=E4=BB=A5=E5=8F=8A=E6=B5=8B=E8=AF=95=E5=80=9F=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../train/member/aspect/LogAspect.java | 101 ++++++++++++++++++ .../member/controller/testController.java | 21 ++++ pom.xml | 14 +++ 3 files changed, 136 insertions(+) create mode 100644 member/src/main/java/com/yovinchen/train/member/aspect/LogAspect.java create mode 100644 member/src/main/java/com/yovinchen/train/member/controller/testController.java diff --git a/member/src/main/java/com/yovinchen/train/member/aspect/LogAspect.java b/member/src/main/java/com/yovinchen/train/member/aspect/LogAspect.java new file mode 100644 index 0000000..30c0a94 --- /dev/null +++ b/member/src/main/java/com/yovinchen/train/member/aspect/LogAspect.java @@ -0,0 +1,101 @@ +package com.yovinchen.train.member.aspect; + +import cn.hutool.core.util.RandomUtil; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.support.spring.PropertyPreFilters; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; +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; + +/** + * ClassName: LogAspect + * Package: com.yovinchen.train.member.aspect + * + * @author yovinchen + * @Create 2024/1/18 17:46 + */ +@Aspect +@Component +public class LogAspect { + private final static Logger LOG = LoggerFactory.getLogger(LogAspect.class); + + public LogAspect() { + System.out.println("Common LogAspect"); + } + + /** + * 定义一个切点 + */ + @Pointcut("execution(public * com.yovinchen..*Controller.*(..))") + public void controllerPointcut() { + } + + @Before("controllerPointcut()") + public void doBefore(JoinPoint joinPoint) { + + MDC.put("LOG_ID", System.currentTimeMillis() + RandomUtil.randomString(3)); + // 开始打印请求日志 + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = attributes.getRequest(); + Signature signature = joinPoint.getSignature(); + String name = signature.getName(); + + // 打印请求信息 + LOG.info("------------- 开始 -------------"); + LOG.info("请求地址: {} {}", request.getRequestURL() + .toString(), request.getMethod()); + LOG.info("类名方法: {}.{}", signature.getDeclaringTypeName(), name); + LOG.info("远程地址: {}", request.getRemoteAddr()); + + // 打印请求参数 + Object[] args = joinPoint.getArgs(); + // LOG.info("请求参数: {}", JSONObject.toJSONString(args)); + + // 排除特殊类型的参数,如文件类型 + Object[] arguments = new Object[args.length]; + for (int i = 0; i < args.length; i++) { + if (args[i] instanceof ServletRequest + || args[i] instanceof ServletResponse + || args[i] instanceof MultipartFile) { + continue; + } + arguments[i] = args[i]; + } + // 排除字段,敏感字段或太长的字段不显示:身份证、手机号、邮箱、密码等 + String[] excludeProperties = {"mobile"}; + PropertyPreFilters filters = new PropertyPreFilters(); + PropertyPreFilters.MySimplePropertyPreFilter excludefilter = filters.addFilter(); + excludefilter.addExcludes(excludeProperties); + LOG.info("请求参数: {}", JSONObject.toJSONString(arguments, excludefilter)); + } + + @Around("controllerPointcut()") + public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { + long startTime = System.currentTimeMillis(); + Object result = proceedingJoinPoint.proceed(); + // 排除字段,敏感字段或太长的字段不显示:身份证、手机号、邮箱、密码等 + String[] excludeProperties = {}; + PropertyPreFilters filters = new PropertyPreFilters(); + PropertyPreFilters.MySimplePropertyPreFilter excludefilter = filters.addFilter(); + excludefilter.addExcludes(excludeProperties); + LOG.info("返回结果: {}", JSONObject.toJSONString(result, excludefilter)); + LOG.info("------------- 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime); + return result; + } + +} + diff --git a/member/src/main/java/com/yovinchen/train/member/controller/testController.java b/member/src/main/java/com/yovinchen/train/member/controller/testController.java new file mode 100644 index 0000000..8504e1c --- /dev/null +++ b/member/src/main/java/com/yovinchen/train/member/controller/testController.java @@ -0,0 +1,21 @@ +package com.yovinchen.train.member.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * ClassName: testController + * Package: com.yovinchen.train.member.controller + * + * @author yovinchen + * @Create 2024/1/18 17:58 + */ +@RestController +@RequestMapping("/member") +public class testController { + @GetMapping("/test") + public void count() { + System.out.println("11111"); + } +} diff --git a/pom.xml b/pom.xml index 2acddeb..203c018 100644 --- a/pom.xml +++ b/pom.xml @@ -22,10 +22,24 @@ 2022.0.0 + + com.alibaba + fastjson + 1.2.73 + + + cn.hutool + hutool-all + 5.6.3 + org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-aop + org.springframework.cloud spring-cloud-starter