(function () { const originalConsole = { debug: console.debug.bind(console), log: console.log.bind(console), info: console.info.bind(console), warn: console.warn.bind(console), error: console.error.bind(console) }; const levels = { silent: 0, error: 1, warn: 2, info: 3, debug: 4 }; function readLevel() { const params = new URLSearchParams(window.location.search); const queryLevel = params.get('log') || params.get('debug'); if (queryLevel === '1' || queryLevel === 'true') return 'debug'; if (queryLevel && levels[queryLevel]) return queryLevel; const savedLevel = localStorage.getItem('ai-if-log-level'); if (savedLevel && Object.prototype.hasOwnProperty.call(levels, savedLevel)) { return savedLevel; } return 'warn'; } const logger = { level: readLevel(), levels, originalConsole, setLevel(level) { if (!Object.prototype.hasOwnProperty.call(levels, level)) { originalConsole.warn(`Unknown log level "${level}". Use silent, error, warn, info, or debug.`); return; } this.level = level; localStorage.setItem('ai-if-log-level', level); originalConsole.info(`AI IF log level set to ${level}`); }, shouldPrint(level) { return levels[this.level] >= levels[level]; }, write(level, args) { if (!this.shouldPrint(level)) return; const writer = originalConsole[level] || originalConsole.log; writer(...args); }, debug(...args) { this.write('debug', args); }, log(...args) { this.write('debug', args); }, info(...args) { this.write('info', args); }, warn(...args) { this.write('warn', args); }, error(...args) { this.write('error', args); } }; console.debug = (...args) => logger.debug(...args); console.log = (...args) => logger.log(...args); console.info = (...args) => logger.info(...args); console.warn = (...args) => logger.warn(...args); console.error = (...args) => logger.error(...args); window.AppLogger = logger; })();