UNPKG

@yambwa/pretty-logger

Version:

A lightweight, extensible logger with log levels, pretty and JSON output, context support, and pluggable transports for Node.js and TypeScript projects.

84 lines (83 loc) 2.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createLogger = createLogger; const types_1 = require("./types"); const formatters_1 = require("./formatters"); /** * Logger implementation */ class Logger { constructor(config = {}) { this.level = config.level || types_1.LogLevel.Info; this.context = config.context; // Determine mode based on NODE_ENV if not explicitly set if (config.mode) { this.mode = config.mode; } else { this.mode = process.env.NODE_ENV === 'production' ? 'json' : 'pretty'; } // Use provided transports or default to console this.transports = config.transports || [formatters_1.defaultConsoleTransport]; } log(level, message, meta) { // Check if this level should be logged if (types_1.logLevelRanks[level] < types_1.logLevelRanks[this.level]) { return; } const entry = { level, message, timestamp: new Date(), context: this.context, meta, }; const formatter = this.mode === 'json' ? formatters_1.formatJSON : formatters_1.formatPretty; const formatted = formatter(entry); // Send to all transports for (const transport of this.transports) { try { transport(entry, formatted); } catch (error) { // Prevent transport errors from breaking logging console.error('Transport error:', error); } } } trace(message, meta) { this.log(types_1.LogLevel.Trace, message, meta); } debug(message, meta) { this.log(types_1.LogLevel.Debug, message, meta); } info(message, meta) { this.log(types_1.LogLevel.Info, message, meta); } warn(message, meta) { this.log(types_1.LogLevel.Warn, message, meta); } error(message, meta) { this.log(types_1.LogLevel.Error, message, meta); } fatal(message, meta) { this.log(types_1.LogLevel.Fatal, message, meta); } setLevel(level) { this.level = level; } withContext(context) { return new Logger({ level: this.level, mode: this.mode, context, transports: this.transports, }); } } /** * Create a new logger instance */ function createLogger(config) { return new Logger(config); }