'a'
mh-two-thousand-and-two
2024-04-12 44d2c92345cd156a59fc327b3060292a282d2893
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;