我最近将我的项目从 Spring Boot 1.4.1、Spring Cloud Sleuth 1.1.0、Spring Cloud Zipkin 1.1.0 升级到 Spring Boot 1.5.3、Spring Cloud Sleuth 1.2.0、Spring Cloud Zipkin 1.2.0。
阅读最新版本的 Spring Cloud Sleuth,他们添加了“错误”标签,如果出现任何异常,这些标签会自动报告给 Zipkin。
我有一个 @ControllerAdvice 类扩展 ResponseEntityExceptionHandler 用于自定义异常处理。在使用旧版本(Spring Boot 1.4.1、Spring Cloud Sleuth 1.1.0、Spring Cloud Zipkin 1.1.0)时,我能够使用以下方法向 Tracer 报告错误并在 Zipkin 中显示相同的错误:
private void reportErrorSpan(String errorDesc, String message) {
if(tracer != null) {
Span span = tracer.getCurrentSpan();
span.logEvent("ERROR: " + message);
tracer.addTag("error", errorDesc);
}
}
升级后,这似乎不起作用,并且 spring cloud sleuth 的默认错误报告也没有发生。只有在注释掉 @ControllerAdvice 并让 Spring Boot 的默认 ErrorController 处理异常之后,我才能在 Zipkin 中可视化错误。但是,我们需要自定义异常处理来以标准方式格式化错误响应,并在我们所有的 PaaS 服务中使用错误代码。有没有办法做到这一点?我应该使用任何其他 Sleuth 对象来实现这一点吗?