8bb765bb3bd427fe36055a5b9ebdcbcda3bb1bd74e54b7ae8ffaff80058d58fce98981c42ee7198abbc6d165b5bee77a96d3051466bffd949cc7ebde1970b8 1014 B

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