除了第一天以外,如何每天使用Winston旋转日志
我需要每天轮换日志,除了当天的文件。 我正在使用winston和winston-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只删除前几天的日志,它不会删除它一次全部)