异常

状态: 稳定,除非另有说明。

本文档定义了如何记录异常及其属性。

记录异常

如果异常在 span 结束时仍未处理并且导致 span 状态被设置为 ERROR,则该异常 SHOULD 在发生异常的 span 上记录为一个 Event

事件的名称 MUST 为 "exception"

状态: 开发中 - 有关如何跨信号报告错误的详细信息,请参阅 错误记录 文档。

使用 API 提供的 recordException 方法 实现此语义约定自动检测工具的典型模板可能如下所示(伪 Java)

Span span = myTracer.startSpan(/*...*/);
try {
  // Code that does the actual work which the Span represents
} catch (Throwable e) {
  span.recordException(e);
  span.setAttribute(AttributeKey.stringKey("error.type"), e.getClass().getCanonicalName())
  span.setStatus(StatusCode.ERROR, e.getMessage());
  throw e;
} finally {
  span.end();
}

Attributes

代表异常的事件 MUST 具有事件名称 exception

此外,SHOULD 填写以下属性

  • exception.message
  • exception.stacktrace
  • exception.type

这些属性的格式和语义在 语义约定 中定义。