【发布时间】:2021-07-15 12:44:10
【问题描述】:
请快速提问关于带有@Counted 和@ExceptionHandler 的Java Micrometer。
我有一个非常简单的@ExceptionHandler:
@ExceptionHandler
@Counted(value = "MY_EXCEPTION", description = "SOME_DESCRIPTION")
public Mono<ResponseEntity<String>> myCoolExceptionHandler(final RuntimeException runtimeException) {
System.err.println("an exception!" + runtimeException);
return Mono.just("bad");
}
我认为这种组合非常有趣,因为它可以让您了解发生的异常情况。我们可以构建仪表板、警报等,非常酷。
不幸的是,当我查看生成的指标时,它是这样的:
# HELP MY_EXCEPTION_total SOME_DESCRIPTION
# TYPE MY_EXCEPTION_total counter
MY_EXCEPTION_total{class="package.MyController",exception="none",method="myCoolExceptionHandler",result="success",} 3.0
我对 exception="none" 和 result="success"
感到很困惑请问这些值最初是如何进入指标的?
还有,如何把它们改成更有意义的东西,比如异常类?
谢谢!
【问题讨论】:
-
猜测:您的处理程序不会抛出异常,因此
@Counted永远不会记录异常。如果将throw new RuntimeException("see?")添加到处理程序的主体中,您将获得带有标签exception="RuntimeException"的指标 -
谢谢@knittl。这正是我想要问的。我的处理程序确实抛出了异常。我看到这个数字是正确的。在我的示例中,我抛出了 3 个异常,并获得了正确的值 3.0。你也是对的,我的处理程序确实抛出了 RuntimeException,这就是为什么,我排除了
exception="RuntimeException"!但是得到了 exception="none" 和 result="success" -
您问题中显示的处理程序不会引发任何异常。如果它没有抛出异常,那么显然异常标签/标记的值将是“无”。问题到底是什么?处理程序本身成功,异常已经在别处抛出
-
没错。请问如何将异常=“none”的值改成其他地方抛出的异常?
-
但它不必是不同的指标。只需使用与注释中相同的参数,您不会注意到生成的指标名称/标签和值有任何差异
标签: java spring-boot spring-micrometer