Java Micrometer @Counted - @ExceptionHandler 的异常="none" 和结果="success"?

Java Micrometer @Counted - exception="none" and result="success" for @ExceptionHandler?

关于 Java Micrometer with @Counted 和 @ExceptionHandler 的快速问题。

我有一个非常简单的@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"

很疑惑

请问这些值最初是如何进入指标的?

此外,如何将它们更改为更有意义的内容,例如异常 class?

谢谢!

带注释的方法本身不会抛出异常并且总是正常完成。所以注解安装的拦截代码永远不会记录异常(exception=none),结果总是好的(result=success)。只有从带注释的方法中抛出的异常才会被记录为错误结果。

您始终可以通过注入 MetricRegistry 然后使用适当的名称和标签注册指标来手动记录指标。