【spring】使用spring的aop特性给接口加入参出参日志(2)

package com.coding.common.aoplogschame2;

import com.coding.common.aoplog.AOPLogAspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Arrays;

@Aspect
@Component
public class MethodAspect {
    private static Logger log = LoggerFactory.getLogger(AOPLogAspect.class);

      @AfterReturning("execution(* com.coding.pc.controller..*.*(..))")
    public void logServiceAccess(JoinPoint joinPoint) {
        log.info("Completed: " + joinPoint);
    }
 
 
    //监控com.coding.pc.controller包及其子包的所有public方法
    //@Pointcut("execution(* com.coding.pc.controller.*(..))")
    @Pointcut("execution(* com.coding.pc.controller..*.*(..))")
    private void pointCutMethod() {
    }
   //声明环绕通知
    @Around("pointCutMethod()")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        long begin = System.nanoTime();
        Object obj = pjp.proceed();
        long end = System.nanoTime();
        log.info("调用方法:{},参数:{},执行耗时:{}纳秒,耗时:{}毫秒", pjp.getSignature().toString(), Arrays.toString(pjp.getArgs()), (end - begin), (end - begin) / 1000000);
        return obj;
    }
}
2021-12-09 19:14:28.963  INFO 8032 --- [nio-8080-exec-1] com.coding.common.aoplog.AOPLogAspect    : 调用方法:String com.coding.pc.controller.DemoController.demo0(String,String),参数:[xiaomi, 10],执行耗时:2545500纳秒,耗时:2毫秒
2021-12-09 19:14:28.964  INFO 8032 --- [nio-8080-exec-1] com.coding.common.aoplog.AOPLogAspect    : Completed: execution(String com.coding.pc.controller.DemoController.demo0(String,String))

猜你喜欢

转载自blog.csdn.net/weixin_40074861/article/details/121829300