@eventuras/logger 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,44 +1,158 @@
1
- import { a as e } from "./chunk-NnHqS4_Y.js";
1
+ import { t as Logger } from "./Logger-n-HsscG5.js";
2
2
  //#region src/opentelemetry.ts
3
- async function t() {
3
+ /**
4
+ * OpenTelemetry integration for @eventuras/logger
5
+ *
6
+ * This module provides integration between Pino and OpenTelemetry Logs API.
7
+ * It allows sending logs to any OpenTelemetry-compatible backend (Sentry, Grafana, Jaeger, etc.)
8
+ * without vendor lock-in.
9
+ *
10
+ * NOTE: This module requires OpenTelemetry packages to be installed as peer dependencies.
11
+ * If they are not available, the integration will gracefully disable itself.
12
+ *
13
+ * @example
14
+ * // In your app's instrumentation.ts or main entry point
15
+ * import { setupOpenTelemetryLogger } from '@eventuras/logger/opentelemetry';
16
+ * import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
17
+ * import { BatchLogRecordProcessor } from '@opentelemetry/sdk-logs';
18
+ *
19
+ * setupOpenTelemetryLogger({
20
+ * logRecordProcessor: new BatchLogRecordProcessor(
21
+ * new OTLPLogExporter({
22
+ * url: 'https://[org].ingest.sentry.io/api/[project]/integration/otlp/v1/logs',
23
+ * headers: { 'x-sentry-auth': 'sentry sentry_key=...' }
24
+ * })
25
+ * )
26
+ * });
27
+ *
28
+ * @example
29
+ * // Then use logger as normal
30
+ * import { Logger } from '@eventuras/logger';
31
+ *
32
+ * const logger = Logger.create({ namespace: 'MyService' });
33
+ * logger.error({ error: err }, 'Something failed'); // Sent to OpenTelemetry backend
34
+ */
35
+ async function loadOpenTelemetry() {
4
36
  try {
5
- let [t, n] = await Promise.all([import("./src-15l0SmY8.js").then((t) => /* @__PURE__ */ e(t.default, 1)), import("./esm-CIhYjsQQ.js")]);
37
+ const [pinoModule, logsModule] = await Promise.all([import("@opentelemetry/instrumentation-pino"), import("@opentelemetry/sdk-logs")]);
6
38
  return {
7
- PinoInstrumentation: t.PinoInstrumentation,
8
- LoggerProvider: n.LoggerProvider
39
+ PinoInstrumentation: pinoModule.PinoInstrumentation,
40
+ LoggerProvider: logsModule.LoggerProvider
9
41
  };
10
42
  } catch {
11
43
  return null;
12
44
  }
13
45
  }
14
- var n = null, r = null;
15
- async function i(e = {}) {
16
- if (typeof window < "u") {
17
- console.warn("[logger] OpenTelemetry integration is server-side only - skipping in browser");
46
+ var pinoInstrumentation = null;
47
+ var loggerProvider = null;
48
+ /**
49
+ * Set up OpenTelemetry integration for Pino logger.
50
+ *
51
+ * This function:
52
+ * 1. Creates or uses provided LoggerProvider
53
+ * 2. Registers the log record processor (for exporting logs)
54
+ * 3. Enables Pino instrumentation to bridge Pino logs to OTel
55
+ *
56
+ * Call this function once at application startup, before creating any loggers.
57
+ *
58
+ * @param options - Configuration options
59
+ *
60
+ * @example
61
+ * // Send to Sentry via OTLP
62
+ * import { setupOpenTelemetryLogger } from '@eventuras/logger';
63
+ * import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
64
+ * import { BatchLogRecordProcessor } from '@opentelemetry/sdk-logs';
65
+ *
66
+ * setupOpenTelemetryLogger({
67
+ * logRecordProcessor: new BatchLogRecordProcessor(
68
+ * new OTLPLogExporter({
69
+ * url: process.env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT,
70
+ * headers: {
71
+ * 'x-sentry-auth': `sentry sentry_key=${process.env.SENTRY_KEY}`
72
+ * }
73
+ * })
74
+ * )
75
+ * });
76
+ *
77
+ * @example
78
+ * // Use environment variables (recommended)
79
+ * // Set these in your environment:
80
+ * // OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://[org].ingest.sentry.io/api/[project]/integration/otlp/v1/logs
81
+ * // OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-sentry-auth=sentry sentry_key=...
82
+ *
83
+ * import { setupOpenTelemetryLogger } from '@eventuras/logger';
84
+ * import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
85
+ * import { BatchLogRecordProcessor } from '@opentelemetry/sdk-logs';
86
+ *
87
+ * await setupOpenTelemetryLogger({
88
+ * logRecordProcessor: new BatchLogRecordProcessor(
89
+ * new OTLPLogExporter() // Reads from env vars
90
+ * )
91
+ * });
92
+ */
93
+ async function setupOpenTelemetryLogger(options = {}) {
94
+ if (typeof window !== "undefined") {
95
+ Logger.warn({ namespace: "logger:otel" }, "OpenTelemetry integration is server-side only, skipping");
18
96
  return;
19
97
  }
20
- let { logRecordProcessor: i, loggerProvider: a, serviceName: o, enabled: s = !0 } = e;
21
- if (!s) {
22
- console.log("[logger] OpenTelemetry integration disabled");
98
+ const { logRecordProcessor, loggerProvider: providedLoggerProvider, serviceName, enabled = true } = options;
99
+ if (!enabled) {
100
+ Logger.debug({ namespace: "logger:otel" }, "OpenTelemetry integration disabled");
23
101
  return;
24
102
  }
25
- let c = await t();
26
- if (!c) {
27
- console.warn("[logger] OpenTelemetry packages not available - integration disabled"), console.warn("[logger] Install @opentelemetry/* packages to enable OpenTelemetry integration");
103
+ const otel = await loadOpenTelemetry();
104
+ if (!otel) {
105
+ Logger.warn({ namespace: "logger:otel" }, "OpenTelemetry packages not available integration disabled. Install @opentelemetry/api, @opentelemetry/api-logs, @opentelemetry/instrumentation-pino, and @opentelemetry/sdk-logs to enable.");
28
106
  return;
29
107
  }
30
- let { PinoInstrumentation: l, LoggerProvider: u } = c;
31
- n &&= (n.disable(), null), r = a ?? new u(), i && r && r.addLogRecordProcessor(i);
32
- let d = o ?? (typeof process < "u" ? process.env?.OTEL_SERVICE_NAME : void 0) ?? "unknown-service";
33
- n = new l({ logHook: (e, t) => {
34
- t["service.name"] = d;
35
- } }), n.enable(), console.log("[logger] OpenTelemetry integration enabled"), i && console.log("[logger] Log record processor registered");
108
+ const { PinoInstrumentation, LoggerProvider } = otel;
109
+ if (pinoInstrumentation) {
110
+ pinoInstrumentation.disable();
111
+ pinoInstrumentation = null;
112
+ }
113
+ loggerProvider = providedLoggerProvider ?? new LoggerProvider();
114
+ if (logRecordProcessor && loggerProvider) loggerProvider.addLogRecordProcessor(logRecordProcessor);
115
+ const resolvedServiceName = serviceName ?? (typeof process !== "undefined" ? process.env?.OTEL_SERVICE_NAME : void 0) ?? "unknown-service";
116
+ pinoInstrumentation = new PinoInstrumentation({ logHook: (_span, record) => {
117
+ record["service.name"] = resolvedServiceName;
118
+ } });
119
+ pinoInstrumentation.enable();
120
+ Logger.info({
121
+ namespace: "logger:otel",
122
+ context: { hasProcessor: Boolean(logRecordProcessor) }
123
+ }, "OpenTelemetry integration enabled");
36
124
  }
37
- async function a() {
38
- typeof window < "u" || (n &&= (n.disable(), null), r &&= (await r.shutdown(), null), console.log("[logger] OpenTelemetry integration shut down"));
125
+ /**
126
+ * Shut down the OpenTelemetry logger integration.
127
+ * Call this when your application is shutting down to flush any pending logs.
128
+ *
129
+ * @example
130
+ * process.on('SIGTERM', async () => {
131
+ * await shutdownOpenTelemetryLogger();
132
+ * process.exit(0);
133
+ * });
134
+ */
135
+ async function shutdownOpenTelemetryLogger() {
136
+ if (typeof window !== "undefined") return;
137
+ if (pinoInstrumentation) {
138
+ pinoInstrumentation.disable();
139
+ pinoInstrumentation = null;
140
+ }
141
+ if (loggerProvider) {
142
+ await loggerProvider.shutdown();
143
+ loggerProvider = null;
144
+ }
145
+ Logger.info({ namespace: "logger:otel" }, "OpenTelemetry integration shut down");
39
146
  }
40
- function o() {
41
- return typeof window < "u" ? null : r;
147
+ /**
148
+ * Get the active LoggerProvider instance, if any.
149
+ * Useful for advanced use cases or debugging.
150
+ */
151
+ function getLoggerProvider() {
152
+ if (typeof window !== "undefined") return null;
153
+ return loggerProvider;
42
154
  }
43
155
  //#endregion
44
- export { o as getLoggerProvider, i as setupOpenTelemetryLogger, a as shutdownOpenTelemetryLogger };
156
+ export { getLoggerProvider, setupOpenTelemetryLogger, shutdownOpenTelemetryLogger };
157
+
158
+ //# sourceMappingURL=opentelemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry.js","names":[],"sources":["../src/opentelemetry.ts"],"sourcesContent":["/**\n * OpenTelemetry integration for @eventuras/logger\n *\n * This module provides integration between Pino and OpenTelemetry Logs API.\n * It allows sending logs to any OpenTelemetry-compatible backend (Sentry, Grafana, Jaeger, etc.)\n * without vendor lock-in.\n *\n * NOTE: This module requires OpenTelemetry packages to be installed as peer dependencies.\n * If they are not available, the integration will gracefully disable itself.\n *\n * @example\n * // In your app's instrumentation.ts or main entry point\n * import { setupOpenTelemetryLogger } from '@eventuras/logger/opentelemetry';\n * import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\n * import { BatchLogRecordProcessor } from '@opentelemetry/sdk-logs';\n *\n * setupOpenTelemetryLogger({\n * logRecordProcessor: new BatchLogRecordProcessor(\n * new OTLPLogExporter({\n * url: 'https://[org].ingest.sentry.io/api/[project]/integration/otlp/v1/logs',\n * headers: { 'x-sentry-auth': 'sentry sentry_key=...' }\n * })\n * )\n * });\n *\n * @example\n * // Then use logger as normal\n * import { Logger } from '@eventuras/logger';\n *\n * const logger = Logger.create({ namespace: 'MyService' });\n * logger.error({ error: err }, 'Something failed'); // Sent to OpenTelemetry backend\n */\n\nimport { Logger } from './Logger';\n\n/**\n * Minimal interface for an OpenTelemetry LogRecordProcessor.\n * Compatible with `@opentelemetry/sdk-logs` `LogRecordProcessor`.\n * Defined locally to avoid requiring OTel types at compile time.\n */\nexport interface LogRecordProcessor {\n shutdown(): Promise<void>;\n forceFlush(): Promise<void>;\n}\n\n/**\n * Minimal interface for an OpenTelemetry LoggerProvider.\n * Compatible with `@opentelemetry/sdk-logs` `LoggerProvider`.\n */\nexport interface OTelLoggerProvider {\n addLogRecordProcessor(processor: LogRecordProcessor): void;\n shutdown(): Promise<void>;\n forceFlush?(): Promise<void>;\n}\n\n/** Internal interface for Pino instrumentation */\ninterface PinoInstrumentationInstance {\n enable(): void;\n disable(): void;\n}\n\n// Lazy load OpenTelemetry packages to handle optional peer dependencies\nasync function loadOpenTelemetry() {\n try {\n const [pinoModule, logsModule] = await Promise.all([\n import('@opentelemetry/instrumentation-pino'),\n import('@opentelemetry/sdk-logs'),\n ]);\n return {\n PinoInstrumentation: pinoModule.PinoInstrumentation,\n LoggerProvider: logsModule.LoggerProvider\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Options for OpenTelemetry logger integration\n */\nexport type OpenTelemetryLoggerOptions = {\n /**\n * Log record processor (e.g., BatchLogRecordProcessor with an exporter).\n * If not provided, logs will only be instrumented but not exported.\n */\n logRecordProcessor?: LogRecordProcessor;\n\n /**\n * Logger provider instance. If not provided, a new one will be created.\n */\n loggerProvider?: OTelLoggerProvider;\n\n /**\n * Service name to attach to log records.\n * Defaults to the `OTEL_SERVICE_NAME` environment variable, or `'unknown-service'`.\n */\n serviceName?: string;\n\n /**\n * Whether to enable the integration. Default: true\n */\n enabled?: boolean;\n};\n\nlet pinoInstrumentation: PinoInstrumentationInstance | null = null;\nlet loggerProvider: OTelLoggerProvider | null = null;\n\n/**\n * Set up OpenTelemetry integration for Pino logger.\n *\n * This function:\n * 1. Creates or uses provided LoggerProvider\n * 2. Registers the log record processor (for exporting logs)\n * 3. Enables Pino instrumentation to bridge Pino logs to OTel\n *\n * Call this function once at application startup, before creating any loggers.\n *\n * @param options - Configuration options\n *\n * @example\n * // Send to Sentry via OTLP\n * import { setupOpenTelemetryLogger } from '@eventuras/logger';\n * import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\n * import { BatchLogRecordProcessor } from '@opentelemetry/sdk-logs';\n *\n * setupOpenTelemetryLogger({\n * logRecordProcessor: new BatchLogRecordProcessor(\n * new OTLPLogExporter({\n * url: process.env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT,\n * headers: {\n * 'x-sentry-auth': `sentry sentry_key=${process.env.SENTRY_KEY}`\n * }\n * })\n * )\n * });\n *\n * @example\n * // Use environment variables (recommended)\n * // Set these in your environment:\n * // OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://[org].ingest.sentry.io/api/[project]/integration/otlp/v1/logs\n * // OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-sentry-auth=sentry sentry_key=...\n *\n * import { setupOpenTelemetryLogger } from '@eventuras/logger';\n * import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\n * import { BatchLogRecordProcessor } from '@opentelemetry/sdk-logs';\n *\n * await setupOpenTelemetryLogger({\n * logRecordProcessor: new BatchLogRecordProcessor(\n * new OTLPLogExporter() // Reads from env vars\n * )\n * });\n */\nexport async function setupOpenTelemetryLogger(\n options: OpenTelemetryLoggerOptions = {}\n): Promise<void> {\n // Check if we're running in a browser environment\n if (typeof window !== 'undefined') {\n Logger.warn({ namespace: 'logger:otel' }, 'OpenTelemetry integration is server-side only, skipping');\n return;\n }\n\n const {\n logRecordProcessor,\n loggerProvider: providedLoggerProvider,\n serviceName,\n enabled = true,\n } = options;\n\n if (!enabled) {\n Logger.debug({ namespace: 'logger:otel' }, 'OpenTelemetry integration disabled');\n return;\n }\n\n // Lazy load OpenTelemetry packages\n const otel = await loadOpenTelemetry();\n\n if (!otel) {\n Logger.warn(\n { namespace: 'logger:otel' },\n 'OpenTelemetry packages not available — integration disabled. Install @opentelemetry/api, @opentelemetry/api-logs, @opentelemetry/instrumentation-pino, and @opentelemetry/sdk-logs to enable.',\n );\n return;\n }\n\n const { PinoInstrumentation, LoggerProvider } = otel;\n\n // Clean up existing instrumentation if re-initializing\n if (pinoInstrumentation) {\n pinoInstrumentation.disable();\n pinoInstrumentation = null;\n }\n\n // Create or use provided logger provider\n loggerProvider = (providedLoggerProvider ?? new LoggerProvider()) as OTelLoggerProvider;\n\n // Register log record processor if provided\n if (logRecordProcessor && loggerProvider) {\n loggerProvider.addLogRecordProcessor(logRecordProcessor);\n }\n\n // Resolve service name from option, env var, or fallback\n const resolvedServiceName =\n serviceName ??\n (typeof process !== 'undefined' ? process.env?.OTEL_SERVICE_NAME : undefined) ??\n 'unknown-service';\n\n // Enable Pino instrumentation to bridge Pino logs to OpenTelemetry\n pinoInstrumentation = new PinoInstrumentation({\n logHook: (_span: unknown, record: Record<string, unknown>) => {\n record['service.name'] = resolvedServiceName;\n },\n }) as PinoInstrumentationInstance;\n\n pinoInstrumentation.enable();\n\n Logger.info(\n { namespace: 'logger:otel', context: { hasProcessor: Boolean(logRecordProcessor) } },\n 'OpenTelemetry integration enabled',\n );\n}\n\n/**\n * Shut down the OpenTelemetry logger integration.\n * Call this when your application is shutting down to flush any pending logs.\n *\n * @example\n * process.on('SIGTERM', async () => {\n * await shutdownOpenTelemetryLogger();\n * process.exit(0);\n * });\n */\nexport async function shutdownOpenTelemetryLogger(): Promise<void> {\n // Check if we're running in a browser environment\n if (typeof window !== 'undefined') {\n return;\n }\n\n if (pinoInstrumentation) {\n pinoInstrumentation.disable();\n pinoInstrumentation = null;\n }\n\n if (loggerProvider) {\n await loggerProvider.shutdown();\n loggerProvider = null;\n }\n\n Logger.info({ namespace: 'logger:otel' }, 'OpenTelemetry integration shut down');\n}\n\n/**\n * Get the active LoggerProvider instance, if any.\n * Useful for advanced use cases or debugging.\n */\nexport function getLoggerProvider(): OTelLoggerProvider | null {\n // Return null if in browser environment\n if (typeof window !== 'undefined') {\n return null;\n }\n\n return loggerProvider;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DA,eAAe,oBAAoB;AACjC,KAAI;EACF,MAAM,CAAC,YAAY,cAAc,MAAM,QAAQ,IAAI,CACjD,OAAO,wCACP,OAAO,2BACR,CAAC;AACF,SAAO;GACL,qBAAqB,WAAW;GAChC,gBAAgB,WAAW;GAC5B;SACK;AACN,SAAO;;;AA+BX,IAAI,sBAA0D;AAC9D,IAAI,iBAA4C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+ChD,eAAsB,yBACpB,UAAsC,EAAE,EACzB;AAEf,KAAI,OAAO,WAAW,aAAa;AACjC,SAAO,KAAK,EAAE,WAAW,eAAe,EAAE,0DAA0D;AACpG;;CAGF,MAAM,EACJ,oBACA,gBAAgB,wBAChB,aACA,UAAU,SACR;AAEJ,KAAI,CAAC,SAAS;AACZ,SAAO,MAAM,EAAE,WAAW,eAAe,EAAE,qCAAqC;AAChF;;CAIF,MAAM,OAAO,MAAM,mBAAmB;AAEtC,KAAI,CAAC,MAAM;AACT,SAAO,KACL,EAAE,WAAW,eAAe,EAC5B,gMACD;AACD;;CAGF,MAAM,EAAE,qBAAqB,mBAAmB;AAGhD,KAAI,qBAAqB;AACvB,sBAAoB,SAAS;AAC7B,wBAAsB;;AAIxB,kBAAkB,0BAA0B,IAAI,gBAAgB;AAGhE,KAAI,sBAAsB,eACxB,gBAAe,sBAAsB,mBAAmB;CAI1D,MAAM,sBACJ,gBACC,OAAO,YAAY,cAAc,QAAQ,KAAK,oBAAoB,KAAA,MACnE;AAGF,uBAAsB,IAAI,oBAAoB,EAC5C,UAAU,OAAgB,WAAoC;AAC5D,SAAO,kBAAkB;IAE5B,CAAC;AAEF,qBAAoB,QAAQ;AAE5B,QAAO,KACL;EAAE,WAAW;EAAe,SAAS,EAAE,cAAc,QAAQ,mBAAmB,EAAE;EAAE,EACpF,oCACD;;;;;;;;;;;;AAaH,eAAsB,8BAA6C;AAEjE,KAAI,OAAO,WAAW,YACpB;AAGF,KAAI,qBAAqB;AACvB,sBAAoB,SAAS;AAC7B,wBAAsB;;AAGxB,KAAI,gBAAgB;AAClB,QAAM,eAAe,UAAU;AAC/B,mBAAiB;;AAGnB,QAAO,KAAK,EAAE,WAAW,eAAe,EAAE,sCAAsC;;;;;;AAOlF,SAAgB,oBAA+C;AAE7D,KAAI,OAAO,WAAW,YACpB,QAAO;AAGT,QAAO"}
@@ -1,15 +1,27 @@
1
1
  import { Logger as PinoLogger, LoggerOptions as PinoLoggerOptions } from 'pino';
2
2
  import { LogLevel, LogTransport } from '../types';
3
+ /**
4
+ * Minimal structural type for a Pino destination stream — accepts anything
5
+ * with a `write` method. Defined locally so this file (re-exported from the
6
+ * universal `@eventuras/logger` entry) doesn't pull `NodeJS.*` types into
7
+ * browser/edge consumers that don't ship `@types/node`.
8
+ */
9
+ export interface PinoDestinationStream {
10
+ write(chunk: string | Uint8Array): unknown;
11
+ }
3
12
  /** Options for creating a PinoTransport. */
4
13
  export type PinoTransportOptions = {
5
14
  /** Minimum log level. Defaults to `'info'`. */
6
15
  level?: LogLevel;
7
16
  /** Field paths to redact from output. */
8
17
  redact?: string[];
9
- /** Enable pretty-printed, human-readable output. */
10
- prettyPrint?: boolean;
11
18
  /** File path destination (omit for stdout). */
12
19
  destination?: string;
20
+ /**
21
+ * Writable stream destination (e.g. a pretty-print stream from
22
+ * `@eventuras/logger/node`). Takes precedence over `destination`.
23
+ */
24
+ destinationStream?: PinoDestinationStream;
13
25
  /** Raw Pino options for advanced tuning (merged after built-in defaults). */
14
26
  pinoOptions?: PinoLoggerOptions;
15
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pino.d.ts","sourceRoot":"","sources":["../../src/transports/pino.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAa,EAAE,KAAK,MAAM,IAAI,UAAU,EAAE,KAAK,aAAa,IAAI,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAChG,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGvD,4CAA4C;AAC5C,MAAM,MAAM,oBAAoB,GAAG;IACjC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF,qBAAa,aAAc,YAAW,YAAY;IAChD,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;gBAEd,OAAO,GAAE,oBAAyB;IAwB9C,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAQvE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY;IAKhD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"pino.d.ts","sourceRoot":"","sources":["../../src/transports/pino.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAa,EAAE,KAAK,MAAM,IAAI,UAAU,EAAE,KAAK,aAAa,IAAI,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAChG,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;CAC5C;AAED,4CAA4C;AAC5C,MAAM,MAAM,oBAAoB,GAAG;IACjC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC1C,6EAA6E;IAC7E,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF,qBAAa,aAAc,YAAW,YAAY;IAChD,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;gBAEd,OAAO,GAAE,oBAAyB;IA2B9C,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAQvE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY;IAKhD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
package/dist/types.d.ts CHANGED
@@ -52,11 +52,15 @@ export type LoggerConfig = {
52
52
  level?: LogLevel;
53
53
  /** Field paths to redact from log output (e.g., ['password', 'token']). */
54
54
  redact?: string[];
55
- /** Enable pretty-printed output (auto-enabled in development). */
56
- prettyPrint?: boolean;
57
55
  /** Optional file path for log output (Pino only). */
58
56
  destination?: string;
59
- /** Custom transport implementation. Defaults to PinoTransport. */
57
+ /**
58
+ * Custom transport implementation. The default depends on the runtime:
59
+ * `PinoTransport` (JSON output) on Node.js, and `ConsoleTransport`
60
+ * (browser-safe `console.*` calls) in browser/edge runtimes. For
61
+ * pretty-printed dev output, use `configureNodeLogger` from
62
+ * `@eventuras/logger/node`.
63
+ */
60
64
  transport?: LogTransport;
61
65
  };
62
66
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kEAAkE;AAClE,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAExE,6DAA6D;IAC7D,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC;IAEvD,sCAAsC;IACtC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB,uDAAuD;IACvD,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,qDAAqD;AACrD,MAAM,MAAM,aAAa,GAAG;IAC1B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,mCAAmC;AACnC,MAAM,MAAM,YAAY,GAAG;IACzB,gCAAgC;IAChC,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kEAAkE;AAClE,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAExE,6DAA6D;IAC7D,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC;IAEvD,sCAAsC;IACtC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB,uDAAuD;IACvD,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,qDAAqD;AACrD,MAAM,MAAM,aAAa,GAAG;IAC1B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,mCAAmC;AACnC,MAAM,MAAM,YAAY,GAAG;IACzB,gCAAgC;IAChC,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eventuras/logger",
3
- "version": "0.7.1",
3
+ "version": "0.8.1",
4
4
  "description": "Structured logging with Pino and optional OpenTelemetry integration",
5
5
  "keywords": [
6
6
  "logger",
@@ -45,18 +45,18 @@
45
45
  },
46
46
  "devDependencies": {
47
47
  "@opentelemetry/api": "^1.9.1",
48
- "@opentelemetry/api-logs": "^0.214.0",
49
- "@opentelemetry/instrumentation-pino": "^0.60.0",
50
- "@opentelemetry/sdk-logs": "^0.214.0",
48
+ "@opentelemetry/api-logs": "^0.215.0",
49
+ "@opentelemetry/instrumentation-pino": "^0.61.0",
50
+ "@opentelemetry/sdk-logs": "^0.215.0",
51
51
  "vite": "^8.0.8",
52
52
  "vitest": "^4.1.4",
53
- "@eventuras/vite-config": "0.2.1"
53
+ "@eventuras/vite-config": "0.2.2"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "@opentelemetry/api": "^1.9.0",
57
- "@opentelemetry/api-logs": ">=0.200.0",
58
- "@opentelemetry/instrumentation-pino": ">=0.50.0",
59
- "@opentelemetry/sdk-logs": ">=0.200.0"
57
+ "@opentelemetry/api-logs": ">=0.200.0 <1.0.0",
58
+ "@opentelemetry/instrumentation-pino": ">=0.50.0 <1.0.0",
59
+ "@opentelemetry/sdk-logs": ">=0.200.0 <1.0.0"
60
60
  },
61
61
  "peerDependenciesMeta": {
62
62
  "@opentelemetry/api": {
@@ -1,20 +0,0 @@
1
- //#region \0rolldown/runtime.js
2
- var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescriptor, r = Object.getOwnPropertyNames, i = Object.getPrototypeOf, a = Object.prototype.hasOwnProperty, o = (e, t) => () => (e && (t = e(e = 0)), t), s = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), c = (e, n) => {
3
- let r = {};
4
- for (var i in e) t(r, i, {
5
- get: e[i],
6
- enumerable: !0
7
- });
8
- return n || t(r, Symbol.toStringTag, { value: "Module" }), r;
9
- }, l = (e, i, o, s) => {
10
- if (i && typeof i == "object" || typeof i == "function") for (var c = r(i), l = 0, u = c.length, d; l < u; l++) d = c[l], !a.call(e, d) && d !== o && t(e, d, {
11
- get: ((e) => i[e]).bind(null, d),
12
- enumerable: !(s = n(i, d)) || s.enumerable
13
- });
14
- return e;
15
- }, u = (n, r, a) => (a = n == null ? {} : e(i(n)), l(r || !n || !n.__esModule ? t(a, "default", {
16
- value: n,
17
- enumerable: !0
18
- }) : a, n)), d = (e) => a.call(e, "module.exports") ? e["module.exports"] : l(t({}, "__esModule", { value: !0 }), e);
19
- //#endregion
20
- export { u as a, d as i, o as n, c as r, s as t };