除了第一天以外,如何每天使用Winston旋转日志

我需要每天轮换日志,除了当天的文件。 我正在使用winstonwinston-daily-rotate-file库。

在下面的例子中,我第一次执行节点时会生成一个文件“info.log.2016-08-09”。

但是,我真的需要生成文件“info.log”,在这一天之后,应该重命名为“info.log.2016-08-09”,并为当天创build一个新的“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" }) ] }); 

那么一个解决方法可以是多一个传输到info.log

像这样 :

 var logger = new (winston.Logger)({ transports: [ new dailyRotateFile( { //your definition of rotate file }), new (winston.transports.File)({ filename: 'info.log' }) ] }); 

然后设置一些cron在午夜删除info.log,即node-schedule

但是,这种方法可能会出现一些不一致的情况,如果某些东西在午夜之前运行,可能会在第二天logginginfo.log几行然后删除,因此info.log可能不完整。

但是,这个info.log.2016-08-09格式的所有日志仍然是完整的,不受影响。

所以这是考虑是否有非常小的机会有一天不完整的info.log是可以接受的。 (但是你可以创build更高级的检查器,不只是删除文件,而是查看是否存在新的date文件,如果是的话,它看起来是什么,然后从info.log只删除前几天的日志,它不会删除它一次全部)