Node.js 温斯顿:如何轮换原木

Node.js 温斯顿:如何轮换原木,node.js,flatiron.js,Node.js,Flatiron.js,使用Winston处理node.js的日志记录时,如何旋转日志。也就是说,我如何为应用程序运行的每一天创建一个新文件 var logger = new (winston.Logger)({ transports: [ new (winston.transports.Console)(), new (winston.transports.File)({ filename: '2012-07-09.log' }) ] });

使用Winston处理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' });
温斯顿是这里的作者和维护者

每天登录到新文件当前是一个打开的功能请求:。我很想看到有人实施它

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

  • 文件传输接受maxsize选项,当日志文件超过某个字节大小时,该选项将旋转日志文件

  • 还有一个关于新传输的开放拉取请求,我还没有机会真正深入研究“fileRotate”,这似乎是基于日期的轮换:


  • 根据作者的说法,这是一个:

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

    文件传输通过“filename”选项接受文件名,并将该文件用作主要日志记录目标。 如果文件增长超过“maxsize”字节,则重命名当前日志文件并创建新的主日志磁贴。 重命名日志文件的名称格式为“basenameYYYYMMDD[a-z].bak”

    可供选择的方案有:

    • 级别:此传输应记录的消息级别
    • 静默:指示是否抑制输出的布尔标志
    • 时间戳:布尔标志,指示是否应在输出前加上时间戳(默认为true)。如果指定了函数,则将使用其返回值而不是时间戳
    • 文件名:要写入输出的日志文件的文件名
    • dirname:将在其中创建日志文件的文件夹
    • maxsize:日志文件的最大大小(以字节为单位),如果超过该大小,则会创建一个新文件
    • json:如果为true,消息将被记录为json(默认为true)

    该功能已存在,我们正在生产中使用,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
            })
        ]
    });
    

    截至2012年12月18日,Winston现在提供此功能(请参阅)

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

    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.createLogger)({
        transports: [
          transport
        ]
    });
    logger.info('Hello World!');
    

    其他人已经对这个问题给出了很好的答案。但是,对于那些正在寻找如何使用更现代的JavaScript语法(ES6及更高版本)实现这一点的示例的人来说,以下代码应该会有所帮助:

    const { createLogger, transports } = require('winston');
    require('winston-daily-rotate-file');
    
    const logger = createLogger({
        level: 'info',
        transports: [
          new transports.DailyRotateFile({
             filename: 'info-%DATE%.log',
             datePattern: 'YYYY-MM-DD',
             zippedArchive: true,
             level: 'info'
          })
        ]
    });
    
    logger.log('info', 'Test Log Message', { anything: 'This is metadata' });
    

    +1-好问题!作为一个纯粹的猜测,您可能会编写自己的传输文件记录器,其中包含有关如何记录的选项(类似于IIS和其他web服务器)?此传输现在已添加到自己的npm模块中:它已更改: