温斯顿:如何旋转日志

使用Winston处理node.js的日志logging时,如何旋转日志 也就是说,如何为应用程序运行的每一天创build一个新文件?

var logger = new (winston.Logger)({ transports: [ new (winston.transports.Console)(), new (winston.transports.File)({ filename: '2012-07-09.log' }) ] }); logger.log('info', 'Test Log Message', { anything: 'This is metadata' }); 

       

网上收集的解决方案 "温斯顿:如何旋转日志"

温斯顿的作者和维护者在这里。

每天login到一个新文件目前是一个开放的function请求: https : //github.com/flatiron/winston/issues/10 。 很想看到有人实施它。

也就是说,还有其他的select:

  1. File传输接受一个maxsize选项,当日志文件超过一定的字节大小时,会自动旋转日志文件。

  2. 还有一个新的交通工具,我没有机会真正挖掘到“fileRotate”,这似乎是这种基于date的旋转: https : //github.com/flatiron/winston /拉/ 120 /文件

该function存在,我们正在生产中使用它,winston.transports.DailyRotateFile:

 var timeFormatFn = function() { 'use strict'; return moment().format(cfg.timeFormat); }; var logger = new(winston.Logger)({ exitOnError: false, transports: [ new(winston.transports.DailyRotateFile)({ filename: cfg.appLogName, dirname: __dirname + '/../' + cfg.logsDirectory, datePattern: cfg.rollingDatePattern, timestamp: timeFormatFn }), new(winston.transports.Console)({ colorize: true, timestamp: timeFormatFn }) ] }); 

根据winston-filerotatedate的作者,这是一个:

winston的文件传输,允许日志文件根据大小和时间进行旋转。

文件传输通过“文件名”选项接受文件名,并将该文件用作主日志logging目标。 如果文件增长超过“最大大小”字节,则当前日志文件将被重命名,并创build一个新的主日志磁贴。 重命名的日志文件的名称形如“basenameYYYYMMDD [az] .bak”。

可用的选项有:

  • 级别:此传输应logging的消息级别。
  • silent:指示是否抑制输出的布尔标志。
  • timestamp:布尔标志,指示是否应该用时间戳预先输出(默认值为true)。 如果指定了函数,将使用它的返回值而不是时间戳。
  • filename:要写入输出的日志文件的文件名。
  • dirname:日志文件将被创build的文件夹。
  • maxsize:日志文件的最大大小(以字节为单位),如果超过大小则创build新文件。
  • json:如果为true,则消息将被logging为JSON(默认为true)。

截至2012年12月18日,Winston现已提供此function(请参阅https://github.com/flatiron/winston/pull/205