Sleuth/zipkin ControllerAdvice 不工作
Sleuth/zipkin with ControllerAdvice is not working
我发现有一个老问题,但我在最新版本(spring-cloud-starter-zipkin:2.1.0.RELEASE)上遇到了同样的问题,我调试了一下,发现error为null,所以zipkin就用statuscode猜一下。我必须再次抛出异常才能让zipkin通知异常
error is null
zipkin result
ControllerAdvice
throw the exception again, it works
它是 null
是完全有道理的。那是因为你控制了捕获的异常发生的方式。在你的情况下,什么都没有,因为你吞下了那个例外。
如果你想做得更好,只需通过SpanCustomizer
手动添加错误标签。这样您就可以将异常添加到给定的跨度中。然后它会自动关闭并报告给 Zipkin(你当然可以做 ex.toString()
以外的事情。
@Slf4j
@RestControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class ExceptionHanders {
private final SpanCustomizer customizer;
public ExceptionHanders(SpanCustomizer customizer) {
this.customizer = customizer;
}
@ExceptionHandler({RuntimeException.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleRuntimeException(Exception ex) throws Exception {
this.customizer.tag("error", ex.toString());
return "testabcd";
}
}
我发现有一个老问题
error is null
zipkin result
ControllerAdvice
throw the exception again, it works
它是 null
是完全有道理的。那是因为你控制了捕获的异常发生的方式。在你的情况下,什么都没有,因为你吞下了那个例外。
如果你想做得更好,只需通过SpanCustomizer
手动添加错误标签。这样您就可以将异常添加到给定的跨度中。然后它会自动关闭并报告给 Zipkin(你当然可以做 ex.toString()
以外的事情。
@Slf4j
@RestControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class ExceptionHanders {
private final SpanCustomizer customizer;
public ExceptionHanders(SpanCustomizer customizer) {
this.customizer = customizer;
}
@ExceptionHandler({RuntimeException.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleRuntimeException(Exception ex) throws Exception {
this.customizer.tag("error", ex.toString());
return "testabcd";
}
}