smart-saga-pattern
Version:
A library implementing the Saga pattern for microservice architecture
113 lines (112 loc) • 3.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoggerFactory = exports.ConsoleLogger = exports.LogLevel = void 0;
/**
* Log levels
*/
var LogLevel;
(function (LogLevel) {
LogLevel["DEBUG"] = "DEBUG";
LogLevel["INFO"] = "INFO";
LogLevel["WARN"] = "WARN";
LogLevel["ERROR"] = "ERROR";
})(LogLevel || (exports.LogLevel = LogLevel = {}));
/**
* Console implementation of SagaLogger
*/
class ConsoleLogger {
/**
* Creates a new ConsoleLogger
* @param options Logger options
*/
constructor(options = {}) {
this.LOG_LEVEL_PRIORITY = {
[LogLevel.DEBUG]: 0,
[LogLevel.INFO]: 1,
[LogLevel.WARN]: 2,
[LogLevel.ERROR]: 3
};
this.level = options.level || LogLevel.INFO;
this.includeTimestamp = options.includeTimestamp !== undefined ? options.includeTimestamp : true;
}
/**
* Logs a debug message
* @param message Message to log
* @param meta Optional metadata
*/
debug(message, meta) {
this.log(LogLevel.DEBUG, message, undefined, meta);
}
/**
* Logs an info message
* @param message Message to log
* @param meta Optional metadata
*/
info(message, meta) {
this.log(LogLevel.INFO, message, undefined, meta);
}
/**
* Logs a warning message
* @param message Message to log
* @param meta Optional metadata
*/
warn(message, meta) {
this.log(LogLevel.WARN, message, undefined, meta);
}
/**
* Logs an error message
* @param message Message to log
* @param error Optional error
* @param meta Optional metadata
*/
error(message, error, meta) {
this.log(LogLevel.ERROR, message, error, meta);
}
/**
* Logs a message
* @param level Log level
* @param message Message to log
* @param error Optional error
* @param meta Optional metadata
*/
log(level, message, error, meta) {
if (this.LOG_LEVEL_PRIORITY[level] < this.LOG_LEVEL_PRIORITY[this.level]) {
return;
}
const timestamp = this.includeTimestamp ? new Date().toISOString() : '';
const prefix = this.includeTimestamp ? `[${timestamp}] [${level}]` : `[${level}]`;
let logMessage = `${prefix} ${message}`;
if (error) {
logMessage += `\nError: ${error.message}\n${error.stack}`;
}
if (meta) {
logMessage += `\nMetadata: ${JSON.stringify(meta, null, 2)}`;
}
switch (level) {
case LogLevel.DEBUG:
case LogLevel.INFO:
console.log(logMessage);
break;
case LogLevel.WARN:
console.warn(logMessage);
break;
case LogLevel.ERROR:
console.error(logMessage);
break;
}
}
}
exports.ConsoleLogger = ConsoleLogger;
/**
* Factory for creating SagaLogger instances
*/
class LoggerFactory {
/**
* Creates a console logger
* @param options Logger options
*/
static createConsoleLogger(options = {}) {
return new ConsoleLogger(options);
}
}
exports.LoggerFactory = LoggerFactory;