UNPKG

perfect-logger

Version:

A zero-dependency, isomorphic logger for Node.js and Browsers with plugin support.

65 lines (64 loc) 2.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Logger = void 0; const constants_1 = require("../constants"); /** * The user-facing logger class. * It provides methods for logging at different levels (info, warn, error, etc.) * and for creating contextual child loggers. */ class Logger { /** * @param logManager The singleton LogManager instance. * @param namespace The name of the logger (e.g., "AuthService"). * @param context Contextual data to be included with every log from this logger. */ constructor(logManager, namespace, context = {}) { this.logManager = logManager; this.namespace = namespace; this.context = context; } trace(message, context) { this.log(constants_1.LogLevel.TRACE, message, context); } debug(message, context) { this.log(constants_1.LogLevel.DEBUG, message, context); } info(message, context) { this.log(constants_1.LogLevel.INFO, message, context); } warn(message, context) { this.log(constants_1.LogLevel.WARN, message, context); } error(message, error, context) { this.log(constants_1.LogLevel.ERROR, message, context, error); } fatal(message, error, context) { this.log(constants_1.LogLevel.FATAL, message, context, error); } /** * Creates a child logger that inherits the parent's context. * @param context Additional context to add to the child logger. * @returns A new Logger instance. */ child(context) { const mergedContext = { ...this.context, ...context }; return new Logger(this.logManager, this.namespace, mergedContext); } log(level, message, localContext, error) { const entry = { timestamp: new Date(), level, namespace: this.namespace, message, context: { ...this.context, ...localContext }, error, }; // Safely check if the context object is empty and remove it if so. if (entry.context && Object.keys(entry.context).length === 0) { delete entry.context; } this.logManager.dispatch(entry); } } exports.Logger = Logger;