美文网首页
完全掌控logging的生与死(五)拦截器上报到CAT

完全掌控logging的生与死(五)拦截器上报到CAT

作者: 牧羊人刘俏 | 来源:发表于2021-01-08 09:35 被阅读0次

这篇是(四篇)的补充篇,我们通过一个简单的demo,实现对系统中自定义的redisService的拦截,然后将相关的信息上报到cat,拦截器我们使用aspectj框架实现,关于pointcut的语法规则详见

https://www.mekau.com/4880.html

代码如下,我们先定一个Pointcut切点,代码如下

 @Pointcut("execution(public * com.*.*.service.RedisService.*(..)) || execution(public * com.*.*.general.service.*RedisService.*(..))")
    public void redisPointcut() {

    }

此拦截器会对RedisService类下的所有方法和匹配了RedisService后缀的类下的所有方法进行拦截。

然后我们定个@Around的Advice,代码如下

 @Around("redisPointcut()")
    public Object executeRedisMethod(ProceedingJoinPoint jp) throws Throwable {


        //如下是一些系统方法,不关注的话,可以直接的skip掉
        if(jp.getSignature().getName().equals("getMetaClass") ||
           jp.getSignature().getName().equals("getPool") ||
           jp.getSignature().getName().equals("withJedis")){

            return  jp.proceed(jp.getArgs());

        }

        Cat cat = Cat.getInstance();
        //方法
        String method = jp.getSignature().getName() == null ? "no method" : jp.getSignature().getName();
        Object[] args = jp.getArgs() ;
        String displayValue = "redis ".concat(method).concat(" -->").concat(args == null ? "no args" : JSON.toJSONString(args)  )
        //上报一个通用的Transaction
        Transaction transaction = Cat.newTransaction(CatConstants.REDIS_OPERATING, method);
        //通过Event类型记录下此transaction里面的一些参数
        Cat.logEvent("REDIS_ARGS",displayValue);
        try {

            Object proceed = jp.proceed(jp.getArgs());
            //记录成功完成状态
            transaction.setStatus(Message.SUCCESS);
            return proceed;
        } catch (Exception e) {
          //自定义的异常处理utils(记录异常log和设置transaction为异常status)
            CatUtil.processException(e, transaction);
            throw e;
        } finally {
            if(transaction!=null) {
               //记录异常完成时间的统计,并在这里异步的上报
                transaction.complete();
            }
        }

    }

以上是一个非常简单的demo,但是却很好的使用cat记录了每次redis调用的相关信息,大家可以在里面继续丰富相关的信息。

相关文章

网友评论

      本文标题:完全掌控logging的生与死(五)拦截器上报到CAT

      本文链接:https://www.haomeiwen.com/subject/wmuxaktx.html