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.

98 lines 3.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConsoleInterceptor = void 0; const utils_1 = require("../../utils"); class ConsoleInterceptor { constructor(logger, preserveOriginal = true) { this.logger = logger; this.preserveOriginal = preserveOriginal; this.enabled = false; this.originalConsole = { log: console.log.bind(console), info: console.info.bind(console), warn: console.warn.bind(console), error: console.error.bind(console), debug: console.debug.bind(console), }; } intercept(level, message, context) { if (!this.enabled) { return; } // Skip logs from logs-interceptor itself const stack = new Error().stack || ''; if (stack.includes('logs-interceptor')) { if (this.preserveOriginal) { this.callOriginal(level, message, context); } return; } this.logger.log(level, message, context); if (this.preserveOriginal) { this.callOriginal(level, message, context); } } enable() { if (this.enabled) { return; } this.enabled = true; const methodMap = { log: 'info', info: 'info', warn: 'warn', error: 'error', debug: 'debug', }; ['log', 'info', 'warn', 'error', 'debug'].forEach((method) => { const original = this.originalConsole[method]; const level = methodMap[method]; console[method] = (...args) => { const message = args .map((arg) => typeof arg === 'string' ? arg : (0, utils_1.safeStringify)(arg)) .join(' '); this.intercept(level, message, { source: 'console' }); }; }); } disable() { if (!this.enabled) { return; } this.enabled = false; this.restore(); } isEnabled() { return this.enabled; } restore() { console.log = this.originalConsole.log; console.info = this.originalConsole.info; console.warn = this.originalConsole.warn; console.error = this.originalConsole.error; console.debug = this.originalConsole.debug; } callOriginal(level, message, context) { const fullMessage = context ? `${message} ${(0, utils_1.safeStringify)(context)}` : message; switch (level) { case 'debug': this.originalConsole.debug(fullMessage); break; case 'info': this.originalConsole.info(fullMessage); break; case 'warn': this.originalConsole.warn(fullMessage); break; case 'error': this.originalConsole.error(fullMessage); break; default: this.originalConsole.log(fullMessage); } } } exports.ConsoleInterceptor = ConsoleInterceptor; //# sourceMappingURL=ConsoleInterceptor.js.map