这就是我的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
'目录,所以我有点困惑。任何帮助将不胜感激。
答案 0 :(得分:-1)
这是因为当您使用“fs”模块创建目录时,它会在您的文件所在的同一级别创建新目录。但是使用Winston,它在项目级别创建了目录(filename:'logs / -system.log')。 这就是创建两个目录的原因。