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