1 | "use strict";
|
2 |
|
3 | const LEVELS = ['debug', 'info', 'warn', 'error', 'silent'];
|
4 | const LEVEL_TO_CONSOLE_METHOD = new Map([['debug', 'log'], ['info', 'log'], ['warn', 'log']]);
|
5 |
|
6 | class 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 |
|
28 | Logger.levels = LEVELS;
|
29 | Logger.defaultLevel = 'info';
|
30 | ;
|
31 | LEVELS.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 | });
|
38 | module.exports = Logger; |
\ | No newline at end of file |