【发布时间】:2016-12-15 15:25:09
【问题描述】:
我需要每天轮换日志,但当天的文件除外。 我正在使用 winston 和 winston-daily-rotate-file 库。
在以下示例中,仅在我第一次执行节点时生成了一个文件“info.log.2016-08-09”。
但是,我确实需要生成文件“info.log”,并且在这一天之后,应该重命名为“info.log.2016-08-09”,并为该文件创建一个新的“info.log”当前日期。 我知道这是其他应用程序中的正常行为。
var logger = new (winston.Logger)({
transports: [
new dailyRotateFile(
{
name: 'cronInfo',
filename: path.join(__dirname,"log", "info.log"),
level: 'info',
timestamp: function(){
return utils.formatDate(new Date(), "yyyy-mm-dd'T'HH:MM:ss.l'Z'")
},
formatter: function(options) {
return options.timestamp() +' ['+ options.level.toUpperCase() +'] '+ (undefined !== options.message ? options.message : '') +
(options.meta && Object.keys(options.meta).length ? '\n\t'+ JSON.stringify(options.meta) : '' );
},
json:false,
datePattern:".yyyy-MM-dd"
})
]
});
【问题讨论】:
-
当应用程序启动时,您可以在
time-to-change-log-name上设置计时器。 On timer:重命名日志文件,通过Sync函数创建新的info.log以避免Winston调用,设置下一个定时器。也许,Winston必须重新启动以更新日志文件描述符/流(我不确定它是否可能)。