48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
import config from './config.js';
|
|
|
|
class Logger {
|
|
static LEVELS = {
|
|
debug: 0,
|
|
info: 1,
|
|
warn: 2,
|
|
error: 3,
|
|
none: 4
|
|
};
|
|
|
|
static currentLevel = Logger.LEVELS.debug;
|
|
|
|
static setLevel(level) {
|
|
if (level in Logger.LEVELS) {
|
|
Logger.currentLevel = Logger.LEVELS[level];
|
|
}
|
|
}
|
|
|
|
static shouldLog(level, instanceLevel) {
|
|
return Logger.LEVELS[level] >= instanceLevel;
|
|
}
|
|
|
|
constructor(level = 'debug', scope = '') {
|
|
this.level = Logger.LEVELS[level] ?? Logger.LEVELS.debug;
|
|
this.scope = scope.toUpperCase();
|
|
|
|
for (const levelName of Object.keys(Logger.LEVELS)) {
|
|
if (levelName === 'none') continue;
|
|
|
|
this[levelName] = (...args) => {
|
|
if (Logger.shouldLog(levelName, this.level) && typeof console[levelName] === 'function') {
|
|
console[levelName](
|
|
`[${levelName.toUpperCase()}]${this.scope ? ` [${this.scope}]` : ''}`,
|
|
...args
|
|
);
|
|
}
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
// Create a default global logger with no scope, using config value
|
|
const logger = new Logger(config.loggerLevel);
|
|
|
|
export default logger;
|
|
export { Logger };
|