美文网首页Spring Boot 2.x
使用Spring的AOP进行对日志的增强

使用Spring的AOP进行对日志的增强

作者: 往木一兮 | 来源:发表于2018-12-08 09:52 被阅读0次

    spring-boot-aop-log

    说明

    使用Spring的AOP进行对日志的增强操作,在我们启动时可以看见所有的接口都被识别。


    image

    在我们访问接口时,通过aop的环绕通知进行环绕增强。


    image

    我们直接切入请求数据:

    /**
     * 请求拦截
     * @author YI
     * @date 2018-7-19 14:27:04
     */
    @Aspect
    @Component
    public class LogAspect {
        private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
    
        /**
         * 两个..代表所有子目录,最后括号里的两个..代表所有参数
         */
        @Pointcut("execution( * com.yi.aop.log.controller..*(..))")
        public void logPointCut() {
    
        }
    
        @Before("logPointCut()")
        public void doBefore(JoinPoint joinPoint) throws Throwable {
            // 接收到请求,记录请求内容
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            Map<String, String[]> parameterMap = request.getParameterMap();
            // 记录下请求内容
            logger.info("请求地址 : " + request.getRequestURL().toString());
            logger.info("HTTP METHOD : " + request.getMethod());
            logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "."
                    + joinPoint.getSignature().getName());
            logger.info("参数 : " + Arrays.toString(joinPoint.getArgs()));
            logger.info("参数 : " + joinPoint.getArgs());
            logger.info("请求参数 : " + JSONUtil.toJsonStr(parameterMap));
        }
    
        /**
         * returning的值和doAfterReturning的参数名一致
         * @param ret
         * @throws Throwable
         */
        @AfterReturning(returning = "ret", pointcut = "logPointCut()")
        public void doAfterReturning(Object ret) throws Throwable {
            // 处理完请求,返回内容(返回值太复杂时,打印的是物理存储空间的地址)
            logger.info("返回值 : " + ret);
        }
    
        /**
         * 环绕通知,环绕增强
         * @param pjp
         * @return
         * @throws Throwable
         */
        @Around("logPointCut()")
        public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
            long startTime = System.currentTimeMillis();
            // ob 为方法的返回值
            Object ob = pjp.proceed();
            logger.info("耗时 : " + (System.currentTimeMillis() - startTime));
            return ob;
        }
    
    }
    

    比较简单,具体看代码吧
    https://github.com/HWYWL/spring-boot-2.x-examples/tree/master/spring-boot-aop-log

    问题建议

    相关文章

      网友评论

        本文标题:使用Spring的AOP进行对日志的增强

        本文链接:https://www.haomeiwen.com/subject/yxofhqtx.html