UNPKG

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