|
|
|
const chalk = require('chalk')
|
|
|
|
const EventEmitter = require('events')
|
|
|
|
|
|
|
|
const LEVELS = ['error', 'warn', 'info', 'debug']
|
|
|
|
const LEVELSIGNORED = ['verbose', 'silly']
|
|
|
|
const LEVELCOLORS = {
|
|
|
|
error: 'red',
|
|
|
|
warn: 'yellow',
|
|
|
|
info: 'green',
|
|
|
|
debug: 'cyan'
|
|
|
|
}
|
|
|
|
|
|
|
|
class Logger extends EventEmitter {}
|
|
|
|
const primaryLogger = new Logger()
|
|
|
|
|
|
|
|
let ignoreNextLevels = false
|
|
|
|
|
|
|
|
primaryLogger.ws = new EventEmitter()
|
|
|
|
|
|
|
|
LEVELS.forEach(lvl => {
|
|
|
|
primaryLogger[lvl] = (...args) => {
|
|
|
|
primaryLogger.emit(lvl, ...args)
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!ignoreNextLevels) {
|
|
|
|
primaryLogger.on(lvl, (msg) => {
|
|
|
|
let formatted = ''
|
|
|
|
if (WIKI.config.logFormat === 'json') {
|
|
|
|
formatted = JSON.stringify({
|
|
|
|
timestamp: new Date().toISOString(),
|
|
|
|
instance: WIKI.INSTANCE_ID,
|
|
|
|
level: lvl,
|
|
|
|
message: msg
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
if (msg instanceof Error) {
|
|
|
|
msg = msg.stack
|
|
|
|
}
|
|
|
|
formatted = chalk`${new Date().toISOString()} {dim [${WIKI.INSTANCE_ID}]} {${LEVELCOLORS[lvl]}.bold ${lvl}}: ${msg}`
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log(formatted)
|
|
|
|
primaryLogger.ws.emit('log', formatted)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
if (lvl === WIKI.config.logLevel) {
|
|
|
|
ignoreNextLevels = true
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
LEVELSIGNORED.forEach(lvl => {
|
|
|
|
primaryLogger[lvl] = () => {}
|
|
|
|
})
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
loggers: {},
|
|
|
|
init () {
|
|
|
|
return primaryLogger
|
|
|
|
}
|
|
|
|
}
|