12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import chalk from 'chalk'
- import EventEmitter from 'node: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 {}
- export default {
- loggers: {},
- init () {
- 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 = `${new Date().toISOString()} ${chalk.dim('[' + WIKI.INSTANCE_ID + ']')} ${chalk[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] = () => {}
- })
- return primaryLogger
- }
- }
|