Winston记录器未正确保存日志 - 创建了两个目录

时间:2016-09-23 11:24:13

标签: node.js logging winston

这就是我的winston记录器的样子:

var winston = require('winston')
var moment = require('moment')
var fs = require('fs')
var logDir = 'logs'

// Create the log directory if it does not exist
if (!fs.existsSync(logDir)) {
  fs.mkdirSync(logDir)
}

function formatter (options) {
  if (options.level === 'error') {
    return options.timestamp() + ' *** ' + options.level.toUpperCase() + ' *** ' + (undefined !== options.message ? options.message : '') +
      (options.meta && Object.keys(options.meta).length ? ' ' + JSON.stringify(options.meta) : ' ')
  } else if (options.level === 'info') {
    return options.timestamp() + ' - ' + options.level.toUpperCase() + ' - ' + (undefined !== options.message ? options.message : '') + (options.meta && Object.keys(options.meta).length ? ' ' + JSON.stringify(options.meta) : '')
  } 
}

var systemLogger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({
      timestamp: function () {
        return moment().format('D/MM/YYYY HH:mm:ss:SSS')
      }
    }),
    new (require('winston-daily-rotate-file'))({
      filename: 'logs/-system.log',
      datePattern: 'dd-MM-yyyy',
      prepend: true,
      json: false,
      timestamp: function () {
        return moment().format('D/MM/YYYY HH:mm:ss:SSS')
      },
      formatter: formatter
    })
  ]
})

module.exports = systemLogger

对我来说,上面的代码看起来一切都很好。但是有两个错误...而不是在项目目录中创建一个名为“logs”的目录,程序会创建两个名为“logs”的目录 - 一次在项目目录中,一个在其外部。知道为什么吗?

所以在我的实际程序中,我会像这样调用记录器:

// winston logger
var systemLogger = require('./logging.js')

    systemLogger.info(Server Updated', {
       'ip': ip
    })

我没有指定我想要两个'logs'目录,所以我有点困惑。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:-1)

这是因为当您使用“fs”模块创建目录时,它会在您的文件所在的同一级别创建新目录。但是使用Winston,它在项目级别创建了目录(filename:'logs / -system.log')。 这就是创建两个目录的原因。