自定义注解+切面,环绕通知打印方法日志

自定义注解+切面,环绕通知打印方法日志

一、自定义注解类
public @interface XXXInterface {
}

二、切面类
@Component
@Aspect
public class XXXInterfaceAspect {

private static final Logger US_LOG = LogBuilderFactory.unstructuredLog();

@Pointcut("@annotation(annotation.XXXInterface)")
public void pointCut() {}

@Around("pointCut()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Exception {
    XXXResponseDTO result;
    Signature signature = joinPoint.getSignature();
    MethodSignature methodSignature = (MethodSignature) signature;
    //获取目标对象
    Object target = joinPoint.getTarget();
    //获取目标方法
    Method method = target.getClass().getMethod(methodSignature.getName(), methodSignature.getParameterTypes());
    //获取方法注解
    XXXInterface annotation = method.getAnnotation(XXXInterface .class);
    //获取方法参数
    Object[] parameterValues = joinPoint.getArgs();
    XXXRequestDTO request = (XXXRequestDTO) Arrays.stream(parameterValues)
            //过滤继承XXXRequestDTO的类
            .filter(XXXRequestDTO.class::isInstance)
            .findFirst()
            .orElse(null);
            //获取请求id
    String requestId = Objects.isNull(request) ? null : request.getRequestId();
    long start = System.currentTimeMillis();
    try {
    //方法执行前打印日志
        xxx_LOG.info("received request, id: {}, method: {}, info: {}", Objects.isNull(requestId) ? StringUtils.EMPTY : requestId, method.getName(), request);
        //执行目标方法
        result = (BaseResponseDTO) joinPoint.proceed();
    } catch (XXXException pme) {
      
   
    } catch (Throwable e) {
   e.getMessage(), requestId);
    }
    result.setRequestId(requestId);
    result.setResponseDateTime(new Date());
    result.setResponseStatus(ResponseStatusEnum.SUCCESS);
    if (Objects.isNull(result.getResults())) {
        xxx_LOG.info("success handling request, id: {}, cost: {}", Objects.isNull(requestId) ? StringUtils.EMPTY : requestId, System.currentTimeMillis() - start);
    } else {
        int resCount = 0;
        if (result.getResults() instanceof List) {
            resCount = ( (List<?>) result.getResults()).size();
        } else if (result.getResults() instanceof Map) {
            resCount = ( (Map<?, ?>) result.getResults()).size();
        }
        //方法执行后打印日志
        xxx_LOG.info();
    }
    return result;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值