zoukankan      html  css  js  c++  java
  • SpringBoot AOP处理请求日志处理打印

    SpringBoot AOP处理请求日志处理打印

    @Slf4j
    @Aspect
    @Configuration
    public class RequestAopConfig {
    
        @Autowired
        private HttpServletRequest request;
    
        private static final ThreadLocal<Long> START_TIME_MILLIS = new ThreadLocal<>();
    
        @Pointcut("execution(* com.xxx.xxx.xxx..*(..)) " +
                "&&(@annotation(org.springframework.web.bind.annotation.PostMapping)" +
                "||@annotation(org.springframework.web.bind.annotation.GetMapping)" +
                "||@annotation(org.springframework.web.bind.annotation.PutMapping)" +
                "||@annotation(org.springframework.web.bind.annotation.DeleteMapping))")
        public void controllerMethodPointcut() {
        }
    
        /**
         * 前置通知:在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)。
         *
         * @param joinPoint 参数
         */
        @Before("controllerMethodPointcut()")
        public void before(JoinPoint joinPoint) {
            START_TIME_MILLIS.set(System.currentTimeMillis());
        }
    
        /**
         * 后置通知:在某连接点正常完成后执行的通知,通常在一个匹配的方法返回的时候执行。
         *
         * @param joinPoint 参数
         */
        @AfterReturning(value = "controllerMethodPointcut()", returning = "result")
        public void afterReturning(JoinPoint joinPoint, Object result) {
            String logTemplate = "--------------- 执行成功 ---------------
    请求开始---Send Request URL: {}, Method: {}, Params: {} 
    请求方法---ClassName: {}, [Method]: {}, execution time: {}ms 
    请求结束---Send Response Result: {}";
            log.info(logTemplate, request.getRequestURL(), request.getMethod(), JSON.toJSONString(joinPoint.getArgs()), joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName(), (System.currentTimeMillis() - START_TIME_MILLIS.get()), JSON.toJSONString(result));
            START_TIME_MILLIS.remove();
        }
    
        /**
         * 异常通知:在方法抛出异常退出时执行的通知。
         *
         * @param joinPoint 参数
         */
        @AfterThrowing(value = "controllerMethodPointcut()", throwing = "ex")
        public void afterThrowing(JoinPoint joinPoint, Throwable ex) {
            String logTemplate = "--------------- 执行失败 ---------------
    异常请求开始---Send Request URL: {}, Method: {}, Params: {} 
    异常请求方法---ClassName: {}, [Method]: {}, execution time: {}ms 
    异常请求结束---Exception Message: {}";
            log.error(logTemplate, request.getRequestURL(), request.getMethod(), JSON.toJSONString(joinPoint.getArgs()), joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName(), (System.currentTimeMillis() - START_TIME_MILLIS.get()), ex.getMessage());
            START_TIME_MILLIS.remove();
        }
    
        /**
         * 最终通知。当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
         *
         * @param joinPoint
         */
        @After("controllerMethodPointcut()")
        public void after(JoinPoint joinPoint) {
        }
    }
    

    赵小胖个人博客

  • 相关阅读:
    uva299 Train Swapping
    uva 10106 Product
    uva 340 MasterMind Hints
    uva 10115 Automatic Editing
    uva748 Exponentiation
    uva152 Tree's a Crowd
    uva 10420 List of Conquests
    uva 644 Immediate Decodability
    要知其所以然的学习(转载)
    持有书籍统计
  • 原文地址:https://www.cnblogs.com/Sky0914/p/12555699.html
Copyright © 2011-2022 走看看