@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
JavaScript
;
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);
}