# 例外

> Source: https://www.ymotongpoo.com/works/otel-specs-ja/spec/trace/exceptions/


**ステータス**: 特記のない限り[Stable](../../document-status/)

この文書は、例外とその属性をどのように記録するかを定義します。

## 例外の記録

例外は、それがスパン終了時に未処理のまま残り、スパンのステータスがERRORに設定される原因となった場合に限り、その例外が発生した間のスパン上の`Event`として記録すべきです（SHOULD）。

イベントの名前は`"exception"`でなければなりません（MUST）。

**ステータス**: [Development](../../document-status/) - 各シグナルをまたいでエラーを報告する方法の詳細については、[Recording Errors](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/general/recording-errors.md)文書を参照してください。

このセマンティック規約を実装する自動計装の典型的なテンプレートは、[APIが提供する`recordException`メソッド](../api/#record-exception)を使うと、以下のようになります（疑似Javaコード）。

```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();
}
```

## 属性

例外を表すイベントは、イベント名として`exception`を持たなければなりません（MUST）。

さらに、以下の属性を記入すべきです（SHOULD）。

- `exception.message`
- `exception.stacktrace`
- `exception.type`

これらの属性の形式と意味は、[セマンティック規約](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/exceptions/exceptions-spans.md)で定義されています。

