温斯顿:如何旋转日志(Winston: how to rotate logs)

2019-06-26 03:53发布

我怎样才能用温斯顿处理日志记录node.js中时旋转日志 也就是说,我怎么可以创建应用程序每天运行一个新的文件?

    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' });

Answer 1:

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

登录到一个新的文件,每天是目前开放的功能要求: https://github.com/flatiron/winston/issues/10 。 很想看到有人实现它。

也就是说,还有其他的选择:

  1. 文件传输接受最大范围的选择,当超过字节一定的规模,这将旋转日志文件。

  2. 还有一个新的传输的开放式拉请求,我还没有机会真正深入到“fileRotate”,这似乎确实这种基于日期的旋转: https://github.com/flatiron/winston /拉/ 120 /文件



Answer 2:

该功能是存在,我们在生产,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
        })
    ]
});


Answer 3:

据笔者温斯顿- filerotatedate它是:

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

文件传输通过“文件名”选项接受的文件名,并使用该文件作为主日志目标。 如果该文件增长过去的“最大范围”字节,则当前的日志文件重命名和一个新的主日志瓷砖被创建。 重命名的日志文件的名称被格式化为这样的“basenameYYYYMMDD [AZ] .bak的”。

可用选项有:

  • 级别:这个运输时应日志信息的级别。
  • 沉默:布尔值,指示是否禁止输出。
  • 时间戳:布尔标志,指示是否应与时间戳(默认为true)前面加上输出。 如果指定的函数,它的返回值将被用来代替时间戳。
  • 文件名:日志文件将输出写入的文件名。
  • 目录名称:日志文件将被创建的文件夹。
  • MAXSIZE:最大规模的日志文件的字节数,如果超过了大小,然后一个新的文件被创建。
  • JSON:如果为true,消息将被记录为JSON(默认为true)。


Answer 4:

正如2012年12月18日的,这个功能现在在温斯顿可用的(见https://github.com/flatiron/winston/pull/205 )



Answer 5:

您可以使用下面的代码,以每天旋转日志文件:

var winston = require('winston');
require('winston-daily-rotate-file');
var transport = new (winston.transports.DailyRotateFile)({
    filename: './log',
    datePattern: 'yyyy-MM-dd.',
    prepend: true,
    level: info
});
var logger = new (winston.Logger)({
    transports: [
      transport
    ]
});
logger.info('Hello World!');


文章来源: Winston: how to rotate logs