Logger.js 1.0 KB

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