UNPKG

@454creative/easy-email

Version:

A framework-agnostic email service library for Node.js with observability and monitoring

117 lines 3.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Logger = exports.LogLevel = void 0; var LogLevel; (function (LogLevel) { LogLevel["DEBUG"] = "debug"; LogLevel["INFO"] = "info"; LogLevel["WARN"] = "warn"; LogLevel["ERROR"] = "error"; })(LogLevel || (exports.LogLevel = LogLevel = {})); class Logger { constructor() { this.logLevel = LogLevel.INFO; this.logs = []; this.metrics = { totalEmailsSent: 0, successfulEmails: 0, failedEmails: 0, averageSendTime: 0, }; } static getInstance() { if (!Logger.instance) { Logger.instance = new Logger(); } return Logger.instance; } setLogLevel(level) { this.logLevel = level; } debug(message, details) { this.log(LogLevel.DEBUG, message, details); } info(message, details) { this.log(LogLevel.INFO, message, details); } warn(message, details) { this.log(LogLevel.WARN, message, details); } error(message, details) { this.log(LogLevel.ERROR, message, details); this.metrics.lastError = { timestamp: new Date().toISOString(), level: LogLevel.ERROR, message, details, }; } log(level, message, details) { if (this.shouldLog(level)) { const entry = { timestamp: new Date().toISOString(), level, message, details, }; this.logs.push(entry); console.log(`[${entry.timestamp}] ${level.toUpperCase()}: ${message}`, details || ''); } } shouldLog(level) { const levels = Object.values(LogLevel); return levels.indexOf(level) >= levels.indexOf(this.logLevel); } startOperation() { this.startTime = Date.now(); } endOperation(success) { if (this.startTime) { const duration = Date.now() - this.startTime; this.metrics.totalEmailsSent++; if (success) { this.metrics.successfulEmails++; } else { this.metrics.failedEmails++; } this.metrics.averageSendTime = (this.metrics.averageSendTime * (this.metrics.totalEmailsSent - 1) + duration) / this.metrics.totalEmailsSent; this.startTime = undefined; } } getMetrics() { return Object.assign({}, this.metrics); } getLogs(level) { if (level) { return this.logs.filter(log => log.level === level); } return [...this.logs]; } clearLogs() { this.logs = []; } resetMetrics() { this.metrics = { totalEmailsSent: 0, successfulEmails: 0, failedEmails: 0, averageSendTime: 0, }; } /** * Create a standardized log entry for email operations * @param operation - The email operation being performed * @param success - Whether the operation was successful * @param details - Additional details about the operation */ logEmailOperation(operation, success, details) { const level = success ? LogLevel.INFO : LogLevel.ERROR; const message = `${operation} ${success ? 'completed successfully' : 'failed'}`; this.log(level, message, details); } } exports.Logger = Logger; //# sourceMappingURL=logger.js.map