UNPKG

cloudflare-image-mcp

Version:
144 lines â€ĸ 4.45 kB
export class Logger { config; isDebugMode; levelOrder = { error: 0, warn: 1, info: 2, debug: 3 }; constructor(config) { this.config = { level: 'info', enableTimestamps: true, enableColors: true, ...config }; // Determine debug mode from environment this.isDebugMode = process.env.NODE_ENV === 'development' || this.config.level === 'debug'; // Auto-adjust level based on environment if (this.isDebugMode && this.config.level === 'info') { this.config.level = 'debug'; } // Parse log level from environment if specified const envLevel = process.env.LOG_LEVEL; if (envLevel && this.isValidLogLevel(envLevel)) { this.config.level = envLevel; } } isValidLogLevel(level) { return ['error', 'warn', 'info', 'debug'].includes(level); } shouldLog(level) { return this.levelOrder[level] <= this.levelOrder[this.config.level]; } formatMessage(level, message, ...args) { const parts = []; // Add timestamp if (this.config.enableTimestamps) { const timestamp = new Date().toISOString(); parts.push(`[${timestamp}]`); } // Add level const levelEmoji = { debug: '🐛', info: 'â„šī¸', warn: 'âš ī¸', error: '❌' }; parts.push(`${levelEmoji[level]}[${level.toUpperCase()}]`); // Add prefix if (this.config.prefix) { parts.push(`[${this.config.prefix}]`); } // Add message parts.push(message); return [parts.join(' '), ...args]; } log(level, message, ...args) { if (!this.shouldLog(level)) { return; } const [formattedMessage, ...formattedArgs] = this.formatMessage(level, message, ...args); switch (level) { case 'debug': console.debug(formattedMessage, ...formattedArgs); break; case 'info': console.info(formattedMessage, ...formattedArgs); break; case 'warn': console.warn(formattedMessage, ...formattedArgs); break; case 'error': console.error(formattedMessage, ...formattedArgs); break; } } // Main logging methods debug(message, ...args) { this.log('debug', message, ...args); } info(message, ...args) { this.log('info', message, ...args); } warn(message, ...args) { this.log('warn', message, ...args); } error(message, ...args) { this.log('error', message, ...args); } rateLimit(message, ...args) { this.warn(`đŸšĻ ${message}`, ...args); } api(message, ...args) { this.debug(`🌐 ${message}`, ...args); } storage(message, ...args) { this.debug(`💾 ${message}`, ...args); } // Conditional logging helpers debugIf(condition, message, ...args) { if (condition) { this.debug(message, ...args); } } logIf(condition, level, message, ...args) { if (condition) { this.log(level, message, ...args); } } // Performance logging time(label) { if (this.shouldLog('debug')) { console.time(`${this.config.prefix} ${label}`); } } timeEnd(label) { if (this.shouldLog('debug')) { console.timeEnd(`${this.config.prefix} ${label}`); } } // Create child logger with different prefix child(prefix) { return new Logger({ level: this.config.level, enableTimestamps: this.config.enableTimestamps, enableColors: this.config.enableColors, prefix: this.config.prefix ? `${this.config.prefix}:${prefix}` : prefix }); } } // Factory function for easy logger creation export function createLogger(serviceName, config) { return new Logger({ level: config?.level || 'info', enableTimestamps: config?.enableTimestamps ?? true, enableColors: config?.enableColors ?? true, prefix: serviceName }); } // Default logger for general use export const logger = new Logger(); //# sourceMappingURL=logger.js.map