gpt4 book ai didi

java - 如何在不同的类(class)中启动和停止计时器?

转载 作者:行者123 更新时间:2023-11-30 05:39:32 25 4
gpt4 key购买 nike

我想测量从传入 HTTP 请求开始到应用程序到达某一点的时间。这两个时间点都位于不同的类中。我将如何启动和停止这些不同类别的计时器。我没有找到使用 MeterRegistry 中的“命名”计时器的方法。

我该如何解决这个问题?

最佳答案

您可以使用 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";
}
}
}

关于java - 如何在不同的类(class)中启动和停止计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55948389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com