import { LoggerProvider, BatchLogRecordProcessor } from '@opentelemetry/sdk-logs'; import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http'; import { resourceFromAttributes } from '@opentelemetry/resources'; import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions'; const endpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT; const serviceName = process.env.OTEL_SERVICE_NAME || 'dansday-discord-bot'; const FLUSH_INTERVAL_MS = 5000; let loggerProvider: LoggerProvider | null = null; if (endpoint?.trim()) { try { const resource = resourceFromAttributes({ [ATTR_SERVICE_NAME]: serviceName }); const logExporter = new OTLPLogExporter({}); loggerProvider = new LoggerProvider({ resource, processors: [new BatchLogRecordProcessor({ exporter: logExporter })] }); const flushInterval = setInterval(() => loggerProvider?.forceFlush().catch(() => {}), FLUSH_INTERVAL_MS); if (flushInterval.unref) { flushInterval.unref(); } } catch (_) { loggerProvider = null; } } export default loggerProvider;