为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不同的课程中启动和停止计时器?

如何在不同的课程中启动和停止计时器?

Helenr 2022-11-02 16:44:03
我想测量从传入 HTTP 请求开始到应用程序到达某个点的时间。这两个时间点都位于不同的类中。我将如何启动和停止这些不同类的计时器。我看不到使用 MeterRegistry 中的“命名”计时器的方法。我该怎么办?
查看完整描述

2 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

您可以使用 AOP,如下所示:


@Aspect

@Component

public class ControllerMonitor {


    protected static  final Logger LOGGER = LoggerFactory.getLogger(ControllerMonitor.class);



    @Before("execution(public * com.demo.controller.*Controller.*(..))")

    public void logBeforeAccess(JoinPoint joinPoint) {

        if(joinPoint!=null){

            String packageName = joinPoint.getSignature()!=null?joinPoint.getSignature().getDeclaringTypeName():"LOG-404";

            LOGGER.info(". . .A request initiated from controller [" + packageName + "."+ getMethodSignature(joinPoint) +  "]. . .");

        }


    }


    @After("execution(public * com.demo.controller.*Controller.*(..))")

    public void logAfterAccess(JoinPoint joinPoint) {

        if(joinPoint!=null){

            String packageName = joinPoint.getSignature()!=null?joinPoint.getSignature().getDeclaringTypeName():"LOG-404";

            LOGGER.info(". . .Request from controller [" + packageName + "."+ getMethodSignature(joinPoint) +  "] completed. . .");

        }

    }


    @AfterThrowing(pointcut = "execution(public * com.demo.controller.*Controller.*(..))",throwing="exception")

    public void logAfterThrowing(Exception exception){

        LOGGER.error("Exception caught:"+ exception.getMessage());

    }


    private String getMethodSignature(JoinPoint joinPoint){

        if(joinPoint!=null){

            String methodName = joinPoint.getSignature().getName();

            Object[] arguments = joinPoint.getArgs();

            StringBuilder sb=new StringBuilder();

            if(arguments!=null){

                for (Object param: arguments) {

                    sb.append(param).append(",");

                }

                sb =(sb.length()>1)?sb.deleteCharAt(sb.length()-1):sb;

            }

            methodName = methodName+"("+new String(sb)+")";

            return methodName;

        }else{

            return "LOG-405";

        }

    }

}


查看完整回答
反对 回复 2022-11-02
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

使用 AOP ......无需在每个类级别上进行更改。这将是一个地方配置..



查看完整回答
反对 回复 2022-11-02
  • 2 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信