spring的aop实现代码

package com.dtpt.aop;
import com.dtpt.common.util.IpAdrressUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.core.annotation.Order;
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.Enumeration;
/**
 * @ClassName:LogAop
 * @Description:TODO
 * @author: 
 * @date: 2019/3/1319:39
 */
@Component
@Aspect
/*
 * 定义切面执行的优先级,数字越低,优先级越高
 * 在切入点之前执行:按order值有小到大的顺序执行
 * 在切入点之后执行:按order值由大到小的顺序执行
 */
@Order(-5)
public class LogAop {
    private static final Logger logger = LogManager.getLogger(LogAop.class);
    // 保证每个线程都有一个单独的实例
    private ThreadLocal<Long> time = new ThreadLocal<>();

    @Pointcut("execution(* com.dtpt.controller..*.*(..))")
    public void pointcut() {
    }

    @Before("pointcut()")
    public void doBefore(JoinPoint joinPoint) {
        time.set(System.currentTimeMillis());
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        //记录请求的内容
        logger.info("Request URL: " + request.getRequestURL().toString());
        logger.info("Request Method: " + request.getMethod());
        logger.info("User-Agent: " + request.getHeader("User-Agent"));
        logger.info("IP:"+ IpAdrressUtil.getIpAdrress(request));
        logger.info("Class Method: " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
      /*  logger.info("Cookies: " + request.getCookies());*/
        logger.info("Params: " + Arrays.toString(joinPoint.getArgs()));
        logger.info("token: "+request.getHeader("Authorization"));
        Enumeration<String> enums = request.getParameterNames();
        while (enums.hasMoreElements()) {
            String paraName = enums.nextElement();
            logger.info(paraName + ":" + request.getParameter(paraName));
        }
    }
    @AfterReturning(pointcut = "pointcut()",returning = "result")
    public void doAfterReturning(JoinPoint joinPoint,Object result) {
        logger.info("返回值: "+result);
        logger.info("耗时 : " + ((System.currentTimeMillis() - time.get())) + "ms");
    }
   @AfterThrowing(value = "pointcut()",throwing = "exception")
    public  void  Logthrows(JoinPoint joinPoint,Throwable exception){
        logger.error(exception.getMessage());
   }


}

 

posted @ 2019-03-20 11:06  荣成  阅读(123)  评论(0编辑  收藏  举报