class Logger { levels = ['trace', 'debug', 'info', 'warn', 'error']; // Default = 'info'. levelIndex = 2; setLevel(level) { const index = this.levels.indexOf(level); if (index === -1) { throw new Error(`Invalid log level: ${level}`); } this.levelIndex = index; } constructor() { this.levels.forEach((level, index) => { this[level] = (...args) => { if (index < this.levelIndex) return; if (level === 'error') error(`${args.join(' ')}`); else if (level === 'warn') warn(`${args.join(' ')}`); else log(`[${level.toUpperCase()}] ${args.join(' ')}`); }; }); } getLevel() { return this.levels[this.levelIndex]; } getLogger(className) { const scopedLogger = {}; this.levels.forEach((level) => { scopedLogger[level] = (msg) => { this[level](`[${className}]`, msg); }; }); return scopedLogger; } } export const logger = new Logger();