Spring Boot AOP Log

来源:互联网 发布:二级代理软件 编辑:程序博客网 时间:2024/06/14 10:16
package com.avp.mems.business.config;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.slf4j.Logger;import org.slf4j.LoggerFactory;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.Enumeration;/** * Created by Amber on 2017/5/19. * 实现日志切面 */@Aspect@Componentpublic class WebLogAspect {    private Logger logger =  LoggerFactory.getLogger(this.getClass());    ThreadLocal<Long> startTime = new ThreadLocal<>();    /**     * 定义一个切入点.     * 解释下:     *     * ~ 第一个 * 代表任意修饰符及任意返回值.     * ~ 第二个 * 任意包名     * ~ 第三个 * 代表任意方法.     * ~ 第四个 * 定义在web包或者子包     * ~ 第五个 * 任意方法     * ~ .. 匹配任意数量的参数.     */    @Pointcut("execution(public * com.avp.mems.business.resource..*.*(..))")    public void webLog(){    }    @Before("webLog()")    public void doBefore(JoinPoint joinPoint){        startTime.set(System.currentTimeMillis());        // 接收到请求,记录请求内容//        logger.info("WebLogAspect.doBefore()");        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()));        //获取所有参数方法一:        Enumeration<String> enu=request.getParameterNames();        while(enu.hasMoreElements()){            String paraName=(String)enu.nextElement();            logger.info(paraName+": "+request.getParameter(paraName));        }    }    @AfterReturning("webLog()")    public void  doAfterReturning(JoinPoint joinPoint){        // 处理完请求,返回内容//        logger.info("WebLogAspect.doAfterReturning()");        logger.info("Use Your Time (ms) : " + (System.currentTimeMillis() - startTime.get()));    }}
原创粉丝点击