WebLogAspect.java 2.27 KB
Newer Older
licc's avatar
licc committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package cn.wisenergy.web.aspect;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * AOP日志
licc's avatar
licc committed
16
 * @author 86187
licc's avatar
licc committed
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
 */
@Aspect
@Component
@Slf4j
public class WebLogAspect {

    /**
     * 两个..代表所有子目录,最后括号里的两个..代表所有参数
     */
    @Pointcut("execution( * cn.wisenergy.web.admin.controller..*.*(..))")
    public void logPointCut() {
    }

    @Before("logPointCut()")
    public void doBefore(JoinPoint joinPoint) {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        // 记录下请求内容
        log.info(" ___________________________________________________________");
        log.info("| 请求地址 : {}", request.getRequestURL().toString());
        log.info("| 请求方式 : {}", request.getMethod());
        // 获取执行的方法全路径
        String methodName = joinPoint.getSignature().getName();
        log.info("| 执行方法 : {}.{}", joinPoint.getSignature().getDeclaringTypeName(), methodName);
    }

    /**
     * returning的值和doAfterReturning的参数名一致
     */
    @AfterReturning(returning = "ret", pointcut = "logPointCut()")
    public void doAfterReturning(Object ret) {
        // 处理完请求,返回内容
        log.info("| 返回值 : {}", JSON.toJSONString(ret));
        log.info(" ———————————————————————————————————————————");
    }

    @Around("logPointCut()")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        long startTime = System.currentTimeMillis();
        // ob 为方法的返回值
        Object ob = pjp.proceed();
        log.info("| 耗时 : {}", (System.currentTimeMillis() - startTime));
        return ob;
    }
}