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