logger.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const chalk = require('chalk')
  2. const EventEmitter = require('events')
  3. /* global WIKI */
  4. const LEVELS = ['error', 'warn', 'info', 'debug']
  5. const LEVELSIGNORED = ['verbose', 'silly']
  6. const LEVELCOLORS = {
  7. error: 'red',
  8. warn: 'yellow',
  9. info: 'green',
  10. debug: 'cyan'
  11. }
  12. class Logger extends EventEmitter {}
  13. const primaryLogger = new Logger()
  14. let ignoreNextLevels = false
  15. primaryLogger.ws = new EventEmitter()
  16. LEVELS.forEach(lvl => {
  17. primaryLogger[lvl] = (...args) => {
  18. primaryLogger.emit(lvl, ...args)
  19. }
  20. if (!ignoreNextLevels) {
  21. primaryLogger.on(lvl, (msg) => {
  22. let formatted = ''
  23. if (WIKI.config.logFormat === 'json') {
  24. formatted = JSON.stringify({
  25. timestamp: new Date().toISOString(),
  26. instance: WIKI.INSTANCE_ID,
  27. level: lvl,
  28. message: msg
  29. })
  30. } else {
  31. formatted = chalk`${new Date().toISOString()} {dim [${WIKI.INSTANCE_ID}]} {${LEVELCOLORS[lvl]}.bold ${lvl}}: ${msg}`
  32. }
  33. console.log(formatted)
  34. primaryLogger.ws.emit('log', formatted)
  35. })
  36. }
  37. if (lvl === WIKI.config.logLevel) {
  38. ignoreNextLevels = true
  39. }
  40. })
  41. LEVELSIGNORED.forEach(lvl => {
  42. primaryLogger[lvl] = () => {}
  43. })
  44. module.exports = {
  45. loggers: {},
  46. init () {
  47. return primaryLogger
  48. }
  49. }