LogAspect.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package com.szwl.common.aop;
  2. import com.gexin.fastjson.JSON;
  3. import com.szwl.model.utils.HttpContextUtils;
  4. import com.szwl.model.utils.IpUtils;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.aspectj.lang.ProceedingJoinPoint;
  7. import org.aspectj.lang.annotation.Around;
  8. import org.aspectj.lang.annotation.Aspect;
  9. import org.aspectj.lang.annotation.Pointcut;
  10. import org.aspectj.lang.reflect.MethodSignature;
  11. import org.springframework.stereotype.Component;
  12. import javax.servlet.http.HttpServletRequest;
  13. import java.lang.reflect.Method;
  14. @Aspect // 切面 定义了通知和切点的关系
  15. @Component
  16. @Slf4j
  17. public class LogAspect {
  18. // 表示切点加在哪里
  19. @Pointcut("@annotation(com.szwl.common.aop.LogAnnotation)")
  20. public void pt() {
  21. }
  22. @Around("pt()")
  23. public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
  24. long beginTime = System.currentTimeMillis();
  25. Object returnValue = joinPoint.proceed();
  26. long time = System.currentTimeMillis() - beginTime;
  27. // 保存日志
  28. recordLog(joinPoint, time);
  29. return returnValue;
  30. }
  31. private void recordLog(ProceedingJoinPoint joinPoint, long time) {
  32. MethodSignature signature = (MethodSignature) joinPoint.getSignature();
  33. Method method = signature.getMethod();
  34. LogAnnotation logAnnotation = method.getAnnotation(LogAnnotation.class);
  35. log.info("========log start=========");
  36. log.info("module:{}", logAnnotation.module());
  37. log.info("operation:{}", logAnnotation.operator());
  38. // 请求的方法名
  39. String className = joinPoint.getTarget().getClass().getName();
  40. String methodName = signature.getName();
  41. log.info("request method:{}", className + "." + methodName + "()");
  42. // 请求的参数
  43. Object[] args = joinPoint.getArgs();
  44. String params = JSON.toJSONString(args[0]);
  45. log.info("params:{}", params);
  46. // 获取request 设置ip地址
  47. HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
  48. log.info("ip:{}", IpUtils.getIpAddr(request));
  49. log.info("execute time : {} ms", time);
  50. log.info("==========log end==========");
  51. }
  52. }