UNPKG

1.01 kBJavaScriptView Raw
1const LEVELS = [
2 'debug',
3 'info',
4 'warn',
5 'error',
6 'silent'
7];
8
9const LEVEL_TO_CONSOLE_METHOD = new Map([
10 ['debug', 'log'],
11 ['info', 'log'],
12 ['warn', 'log']
13]);
14
15class Logger {
16
17 static levels = LEVELS;
18 static defaultLevel = 'info';
19
20 constructor(level = Logger.defaultLevel) {
21 this.activeLevels = new Set();
22 this.setLogLevel(level);
23 }
24
25 setLogLevel(level) {
26 const levelIndex = LEVELS.indexOf(level);
27
28 if (levelIndex === -1) throw new Error(`Invalid log level "${level}". Use one of these: ${LEVELS.join(', ')}`);
29
30 this.activeLevels.clear();
31
32 for (const [i, level] of LEVELS.entries()) {
33 if (i >= levelIndex) this.activeLevels.add(level);
34 }
35 }
36
37 _log(level, ...args) {
38 console[LEVEL_TO_CONSOLE_METHOD.get(level) || level](...args);
39 }
40
41};
42
43LEVELS.forEach(level => {
44 if (level === 'silent') return;
45
46 Logger.prototype[level] = function (...args) {
47 if (this.activeLevels.has(level)) this._log(level, ...args);
48 };
49});
50
51module.exports = Logger;