logger.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. LEVELS.forEach(lvl => {
  16. primaryLogger[lvl] = (...args) => {
  17. primaryLogger.emit(lvl, ...args)
  18. }
  19. if (!ignoreNextLevels) {
  20. primaryLogger.on(lvl, (msg) => {
  21. if (WIKI.config.logFormat === 'json') {
  22. console.log(JSON.stringify({
  23. timestamp: new Date().toISOString(),
  24. instance: WIKI.INSTANCE_ID,
  25. level: lvl,
  26. message: msg
  27. }))
  28. } else {
  29. console.log(chalk`${new Date().toISOString()} {dim [${WIKI.INSTANCE_ID}]} {${LEVELCOLORS[lvl]}.bold ${lvl}}: ${msg}`)
  30. }
  31. })
  32. }
  33. if (lvl === WIKI.config.logLevel) {
  34. ignoreNextLevels = true
  35. }
  36. })
  37. LEVELSIGNORED.forEach(lvl => {
  38. primaryLogger[lvl] = () => {}
  39. })
  40. module.exports = {
  41. loggers: {},
  42. init () {
  43. return primaryLogger
  44. }
  45. }