怎么aop中实现记录请求访问时间:用ThreadLocal

来源:互联网 发布:iphone透明屏幕软件 编辑:程序博客网 时间:2024/05/21 22:57
package com.example.demo.aop;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;import java.util.Arrays;import java.util.logging.Logger;/** * Create by szw on 2017/11/29 17:22 *//** * 切面 */@Aspect@Componentpublic class WebLogAspect {    private Logger logger = Logger.getLogger(String.valueOf(getClass()));    ThreadLocal<Long> startTime = new ThreadLocal<>();    /**     * 切点表达式     */    @Pointcut("execution(public * com.example.demo.web..*.*(..))")    public void webLog(){};    /**     * 前置通知     */    @Before("webLog()")    public void doBefore(JoinPoint joinPoint)throws Throwable {        /**         * 接收到请求,记录请求内容         */        startTime.set(System.currentTimeMillis());        ServletRequestAttributes attributes  = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();        HttpServletRequest request = attributes.getRequest();        /**         * 记录下请求内容         */        logger.info("URL:"+request.getRequestURL().toString());        logger.info("HTTP_METHOD:" + request.getMethod());        logger.info("IP:"+request.getRemoteAddr());        logger.info("CLASS_METHOD:" + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());        logger.info("ARGS:" + Arrays.toString(joinPoint.getArgs()));        logger.info("SPEND TIME : " + (System.currentTimeMillis() - startTime.get()));    }    /**     * 返回后通知     * @param ret     * @throws Throwable     */    @AfterReturning(returning = "ret",pointcut = "webLog()")    public void doAfterReturning(Object ret) throws Throwable{        /**         * 处理完请求,记录返回内容         */        logger.info("RESPONSE:"+ret);    }}
原创粉丝点击