springboot实现打印每个接口请求的出参和入参

发布时间:2022-06-07 21:00:28 作者:yexindonglai@163.com 阅读(5137)

前言

在工作中,在定位问题时经常需要查看每个接口的参数,虽然DEBUG也是个很好的方式,但是这种方式仅限于在本地开发过程中使用,在生产环境中大多数问题的定位都只能通过日志来解决,所以打印参数就显得尤为重要,以下方式使用spring 的 面向切面AOP实现在调用接口前和调用接口后打印出参和入参,只需要一个类既可,代码如下:

  1. package com.bizzan.bitrade.aspect;
  2. import com.alibaba.fastjson.JSONObject;
  3. import io.netty.util.internal.ObjectUtil;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.apache.shiro.SecurityUtils;
  6. import org.aspectj.lang.JoinPoint;
  7. import org.aspectj.lang.annotation.AfterReturning;
  8. import org.aspectj.lang.annotation.Aspect;
  9. import org.aspectj.lang.annotation.Before;
  10. import org.aspectj.lang.annotation.Pointcut;
  11. import org.springframework.stereotype.Component;
  12. import org.springframework.web.context.request.RequestContextHolder;
  13. import org.springframework.web.context.request.ServletRequestAttributes;
  14. import javax.servlet.http.HttpServletRequest;
  15. import java.util.Arrays;
  16. @Aspect
  17. @Component
  18. @Slf4j
  19. public class LogAspect {
  20. @Pointcut("execution(public * com.bizzan.bitrade.controller.*.*(..))")
  21. public void requestAspect(){}
  22. @Before(value = "requestAspect()")
  23. public void methodBefore(JoinPoint joinPoint){
  24. ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
  25. HttpServletRequest request = requestAttributes.getRequest();
  26. //打印请求内容
  27. log.info("请求地址:{},请求方式:{},请求类方法:{},请求类方法参数:{}" ,
  28. request.getRequestURL().toString(),request.getMethod(),
  29. joinPoint.getSignature(), Arrays.toString(joinPoint.getArgs()));
  30. }
  31. //在方法执行完结后打印返回内容
  32. @AfterReturning(returning = "o",pointcut = "requestAspect()")
  33. public void methodAfterReturing(Object o ){
  34. log.info("返回数据:{}" , JSONObject.toJSONString(o));
  35. }
  36. }

关键字Spring

上一篇: springboot集成swagger2

下一篇: maven命令详解