winston.js 1.15 KB
const {transports, createLogger, format} = require('winston')

require('winston-daily-rotate-file')

module.exports = (loggers) => {
  const tps = loggers.map(log => {
    switch (log.type) {
      case 'console':
        return new transports.Console(Object.assign({
          level: 'info'
        }, log))
      case 'file':
        return new transports.File(Object.assign({
          level: 'info',
          zippedArchive: true,
          maxsize: 209715200, // 200m
          maxFiles: 7,
        }, log))
      case 'dailyfile':
        return new transports.DailyRotateFile(Object.assign({
          level: 'info',
          zippedArchive: true,
          maxSize: '200m',
          maxFiles: '7d',
          datePattern: 'YYYY-MM-DD',
          dirname: './logs'
        }, log))
    }
  })

  const logger = createLogger({
    level: 'info',
    format: format.combine(
      format.timestamp({
        format: () => {
          return new Date().toLocaleString()
        }
      }),
      format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
    ),
    transports: tps
  })

  logger.mount = (o) => {
    o['logger'] = logger
  }

  return logger
}