UNPKG

logs-interceptor

Version:

High-performance, production-ready log interceptor for Node.js applications with Loki integration. Built with Clean Architecture principles. Supports Node.js, Browser, and Node-RED.

71 lines 3.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LogsInterceptorFactory = void 0; /** * Presentation: Factory for creating LogsInterceptor instances * Dependency Injection Container */ const LogService_1 = require("../../application/services/LogService"); const LokiTransport_1 = require("../../infrastructure/transport/LokiTransport"); const MemoryBuffer_1 = require("../../infrastructure/buffer/MemoryBuffer"); const LogFilter_1 = require("../../infrastructure/filter/LogFilter"); const CircuitBreaker_1 = require("../../infrastructure/circuit-breaker/CircuitBreaker"); const AsyncLocalStorageContextProvider_1 = require("../../infrastructure/context/AsyncLocalStorageContextProvider"); const ConsoleInterceptor_1 = require("../../infrastructure/interceptors/ConsoleInterceptor"); const api_1 = require("@opentelemetry/api"); class LogsInterceptorFactory { static create(config) { // Create context provider const contextProvider = new AsyncLocalStorageContextProvider_1.AsyncLocalStorageContextProvider(); // Setup dynamic labels with OpenTelemetry support const dynamicLabels = { trace_id: () => { const span = api_1.trace.getSpan(api_1.context.active()); return span?.spanContext().traceId ?? 'undefined'; }, span_id: () => { const span = api_1.trace.getSpan(api_1.context.active()); return span?.spanContext().spanId ?? 'undefined'; }, request_id: () => { return contextProvider.get('requestId') ?? 'undefined'; }, ...config.dynamicLabels, }; // Create circuit breaker const circuitBreaker = new CircuitBreaker_1.CircuitBreaker(config.circuitBreaker); // Create transport const transport = new LokiTransport_1.LokiTransport({ url: config.transport.url, tenantId: config.transport.tenantId, authToken: config.transport.authToken, timeout: config.transport.timeout, maxRetries: config.transport.maxRetries, retryDelay: config.transport.retryDelay, compression: config.transport.compression, compressionLevel: config.performance.compressionLevel, }, circuitBreaker); // Create buffer const buffer = new MemoryBuffer_1.MemoryBuffer(config.buffer); // Create filter const filter = new LogFilter_1.LogFilter(config.filter); // Create log service const logger = new LogService_1.LogService(filter, buffer, transport, contextProvider, { appName: config.appName, version: config.version, environment: config.environment, labels: config.labels, dynamicLabels, enableMetrics: config.enableMetrics, }); // Create console interceptor if enabled let consoleInterceptor; if (config.interceptConsole) { consoleInterceptor = new ConsoleInterceptor_1.ConsoleInterceptor(logger, config.preserveOriginalConsole); consoleInterceptor.enable(); } return { logger, consoleInterceptor }; } } exports.LogsInterceptorFactory = LogsInterceptorFactory; //# sourceMappingURL=LogsInterceptorFactory.js.map