You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.1 KiB

  1. /* global wiki */
  2. const cluster = require('cluster')
  3. const _ = require('lodash')
  4. const fs = require('fs-extra')
  5. const path = require('path')
  6. module.exports = {
  7. loggers: {},
  8. init() {
  9. let winston = require('winston')
  10. let logger = new (winston.Logger)({
  11. level: wiki.config.logLevel,
  12. transports: []
  13. })
  14. logger.filters.push((level, msg) => {
  15. let processName = (cluster.isMaster) ? 'MASTER' : `WORKER-${cluster.worker.id}`
  16. return '[' + processName + '] ' + msg
  17. })
  18. _.forOwn(_.omitBy(wiki.config.logging.loggers, s => s.enabled === false), (loggerConfig, loggerKey) => {
  19. let loggerModule = require(`../extensions/logging/${loggerKey}`)
  20. loggerModule.init(logger, loggerConfig)
  21. fs.readFile(path.join(wiki.ROOTPATH, `assets/svg/auth-icon-${loggerKey}.svg`), 'utf8').then(iconData => {
  22. logger.icon = iconData
  23. }).catch(err => {
  24. if (err.code === 'ENOENT') {
  25. logger.icon = '[missing icon]'
  26. } else {
  27. logger.error(err)
  28. }
  29. })
  30. this.loggers[logger.key] = loggerModule
  31. })
  32. return logger
  33. }
  34. }