Unverified Commit be8654c4 authored by Hong Minhee's avatar Hong Minhee
Browse files

Add error logging in FedifySpanExporter.export()

Log errors when span export fails instead of silently swallowing them.
Also document the new ["fedify", "otel", "exporter"] log category.

https://github.com/fedify-dev/fedify/pull/502#discussion_r2642988497
parent f5b78766
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -210,6 +210,14 @@ The `["fedify", "nodeinfo", "client"]` category is used for logging messages
related to the NodeInfo client.  When you are curious about the NodeInfo client,
you can check the log messages in this category with the `"error"` level.

### `["fedify", "otel", "exporter"]`

*This category is available since Fedify 1.10.0.*

The `["fedify", "otel", "exporter"]` category is used for logging messages
related to the `FedifySpanExporter`.  When span export to the `KvStore` fails,
you can check the log messages in this category with the `"error"` level.

### `["fedify", "runtime", "docloader"]`

*This category is available since Fedify 0.8.0.*
+8 −1
Original line number Diff line number Diff line
import { getLogger } from "@logtape/logtape";
import type { ReadableSpan, SpanExporter } from "@opentelemetry/sdk-trace-base";
import { ExportResultCode } from "@opentelemetry/core";
import type { KvKey, KvStore, KvStoreSetOptions } from "../federation/kv.ts";
@@ -247,7 +248,13 @@ export class FedifySpanExporter implements SpanExporter {
  ): void {
    this.#exportAsync(spans)
      .then(() => resultCallback({ code: ExportResultCode.SUCCESS }))
      .catch(() => resultCallback({ code: ExportResultCode.FAILED }));
      .catch((error) => {
        getLogger(["fedify", "otel", "exporter"]).error(
          "Failed to export spans to KvStore: {error}",
          { error },
        );
        resultCallback({ code: ExportResultCode.FAILED });
      });
  }

  async #exportAsync(spans: ReadableSpan[]): Promise<void> {