const LOG_LEVELS = { debug: 10, info: 20, warn: 30, error: 40, silent: 50 }; const STORAGE_KEY = 'video_socket_log_level'; const DEFAULT_LEVEL = 'warn'; function normalizeLevel(level) { if (!level) { return DEFAULT_LEVEL; } const normalized = String(level).toLowerCase(); return Object.prototype.hasOwnProperty.call(LOG_LEVELS, normalized) ? normalized : DEFAULT_LEVEL; } function getConfiguredLevel() { try { const queryLevel = new URLSearchParams(window.location.search).get('logLevel'); if (queryLevel) { return normalizeLevel(queryLevel); } } catch (_error) { } try { const storageLevel = localStorage.getItem(STORAGE_KEY); if (storageLevel) { return normalizeLevel(storageLevel); } } catch (_error) { } return DEFAULT_LEVEL; } function shouldLog(level) { return LOG_LEVELS[level] >= LOG_LEVELS[getConfiguredLevel()]; } function getConsoleMethod(level) { switch (level) { case 'debug': return console.debug; case 'info': return console.info; case 'warn': return console.warn; case 'error': return console.error; default: return console.log; } } function emit(level, scope, args) { if (!shouldLog(level)) { return; } const prefix = scope ? `[${scope}]` : '[app]'; getConsoleMethod(level)(prefix, ...args); } export function createLogger(scope) { return { debug: (...args) => emit('debug', scope, args), info: (...args) => emit('info', scope, args), warn: (...args) => emit('warn', scope, args), error: (...args) => emit('error', scope, args) }; } export function setBrowserLogLevel(level) { const normalized = normalizeLevel(level); localStorage.setItem(STORAGE_KEY, normalized); return normalized; }