86 lines
2.3 KiB
JavaScript
86 lines
2.3 KiB
JavaScript
(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;
|
|
})();
|