perfect-logger
Version:
A zero-dependency, isomorphic logger for Node.js and Browsers with plugin support.
65 lines (64 loc) • 2.25 kB
JavaScript
;
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;