123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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;
|