Note
Since @logtape/otel package is now maintained along with the @logtape/logtape package, this repository is archived and no longer actively maintained.
Please refer to the LogTape repository for the latest updates and developments.
This package provides an OpenTelemetry sink for LogTape. It allows you to send your LogTape logs to OpenTelemetry-compatible backends.
The package is available on JSR and npm.
deno add @logtape/otel # for Deno
npm add @logtape/otel # for npm
pnpm add @logtape/otel # for pnpm
yarn add @logtape/otel # for Yarn
bun add @logtape/otel # for BunThe quickest way to get started is to use the getOpenTelemetrySink() function
without any arguments:
import { configure } from "@logtape/logtape";
import { getOpenTelemetrySink } from "@logtape/otel";
await configure({
sinks: {
otel: getOpenTelemetrySink(),
},
filters: {},
loggers: [
{ category: [], sinks: ["otel"], level: "debug" },
],
});This will use the default OpenTelemetry configuration, which is to send logs to
the OpenTelemetry collector running on localhost:4317 or respects the OTEL_*
environment variables.
If you want to customize the OpenTelemetry configuration, you can specify
options to the getOpenTelemetrySink() function:
import { configure } from "@logtape/logtape";
import { getOpenTelemetrySink } from "@logtape/otel";
await configure({
sinks: {
otel: getOpenTelemetrySink({
serviceName: "my-service",
otlpExporterConfig: {
url: "https://my-otel-collector:4317",
headers: { "x-api-key": "my-api-key" },
},
}),
},
filters: {},
loggers: [
{ category: [], sinks: ["otel"], level: "debug" },
],
});Or you can even pass an existing OpenTelemetry LoggerProvider instance:
import { configure } from "@logtape/logtape";
import { getOpenTelemetrySink } from "@logtape/otel";
import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
import {
LoggerProvider,
SimpleLogRecordProcessor,
} from '@opentelemetry/sdk-logs';
const exporter = new OTLPLogExporter({
url: "https://my-otel-collector:4317",
headers: { "x-api-key": "my-api-key" },
});
const loggerProvider = new LoggerProvider();
loggerProvider.addProcessor(new SimpleLogRecordProcessor(exporter));
await configure({
sinks: {
otel: getOpenTelemetrySink({ loggerProvider }),
},
filters: {},
loggers: [
{ category: [], sinks: ["otel"], level: "debug" },
],
});For more information, see the documentation of the getOpenTelemetrySink()
function and OpenTelemetrySinkOptions type.
If you want to log diagnostic messages from the OpenTelemetry sink itself,
you can enable diagnostics: true in the sink options:
import { configure, getConsoleSink } from "@logtape/logtape";
import { getOpenTelemetrySink } from "@logtape/otel";
await configure({
sinks: {
otel: getOpenTelemetrySink({ diagnostics: true }),
console: getConsoleSink(),
},
filters: {},
loggers: [
{ category: ["logtape", "meta"], sinks: ["console"], level: "debug" },
{ category: [], sinks: ["otel"], level: "debug" },
],
});This will log messages with the ["logtape", "meta", "otel"] category.
These messages are useful for debugging the configuration of the OpenTelemetry sink, but they can be verbose, so it's recommended to enable them only when needed.
To be released.
- The minimum supported version of LogTape is now 0.12.0, which introduces
"trace"log level support.
Released on February 26, 2025.
-
Now you can customize the body formatter. [#1 by Hyeseong Kim]
- Added
BodyFormattertype. - Changed the type of
OpenTelemetrySinkOptions.messageTypeto"string" | "array" | BodyFormatter | undefined(was"string" | "array" | undefined).
- Added
Released on August 26, 2024.
- The
OpenTelemetrySinkOptionstype is now an interface. - Added
OpenTelemetrySinkOptions.messageTypeoption. - Added
OpenTelemetrySinkOptions.objectRendereroption. Now non-scalar values are rendered usingutil.inspect()in Node.js/Bun andDeno.inspect()in Deno by default.
Released on August 24, 2024. Initial release.