打印方法日志切面

注解定义

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface PrintLog {
}

 

切面实现

@Aspect
@Component
@Slf4j
public class PrintLogAspect {

    @Around("@annotation(com.pdd.service.xxx.core.annotation.PrintLog)")
    public Object print(ProceedingJoinPoint pjp) throws Throwable {
        //获取参数
        Object[] args = pjp.getArgs();
        MethodSignature signature = (MethodSignature) pjp.getSignature();
        //获取方法名
        Method method = signature.getMethod();
        String methodName = method.getName();

        try {
            Object result = pjp.proceed();
            log.info("call {} success. input : {}, output : {}", methodName, JsonUtils.toJson(args), JsonUtils.toJson(result));
            return result;
        } catch (Throwable e) {
            log.error("call {} err. input : {}", methodName, JsonUtils.toJson(args));
            throw e;
        }
    }
}

 

posted @ 2021-01-16 02:42  正义的五毛  阅读(123)  评论(0)    收藏  举报