【问题标题】:It is possible to do hourly log rotation in Winston?可以在 Winston 中进行每小时日志轮换吗?
【发布时间】:2014-01-06 07:09:59
【问题描述】:

您好,我的生产团队有一个要求,我需要每小时创建一次日志,我知道 winston 每天都支持,但这对我没有帮助。 有可能做到这一点吗?

【问题讨论】:

    标签: node.js winston


    【解决方案1】:

    您可以每小时轮换一次 Winston 日志。您需要以日期模式提供小时 (HH)。

    请查看以下示例代码:

    var winston     = require ('winston');
    var path        = require ('path');
    
    var transports  = [];
    
    transports.push(new winston.transports.DailyRotateFile({
      name: 'file',
      datePattern: '.yyyy-MM-ddTHH',
      filename: path.join("some_path", "log_file_name.log")
    }));
    
    var logger = new winston.Logger({transports: transports});
    
    // ... and logging
    logger.info("some info log ...", {extraData: 'abc'});
    

    文件名如下:log_file_name.log.2013-12-17T16log_file_name.log.2013-12-17T17

    我希望这会有所帮助。

    【讨论】:

    • 我正在尝试使用 DailyRotateFile,但出现错误。我想让你看看这个问题,拜托。 Question
    • @AndréLuiz,Winston 库 (github.com/winstonjs/winston/blob/master/CHANGELOG.md) 似乎最近发生了变化,并且在 2015 年 11 月末,DailyRotateFile 传输已移至单独的模块 @987654328 @。您只需将该模块添加到您的 package.json 和 require('winston-daily-rotate-file')。我会尽快更新我的答案。
    • 我已经安装了模块,它给了我同样的错误 =/。我正在使用快递温斯顿
    【解决方案2】:

    更新 正如@Tom 所提到的,rotating Logs 已移出 winston 并在需要时加载

    npm install winston-daily-rotate-file

    代码示例

    const winston = require('winston')
    require('winston-daily-rotate-file');
    const path = require('path');
    let transports  = [];
    const { createLogger } = winston;
    transports.push(
        new winston.transports.DailyRotateFile({
          name: 'file',
          datePattern: 'YYYY-MM-DD-THH-mm',
          filename: path.join(__dirname, 'rotate_logs', 'log_file.log')
        })
    )
    var logger = createLogger({ transports: transports })
    

    如果要测试上述代码的完整示例

    dataLog(0)
    function dataLog(secondsPassed){
        setTimeout(function(){
            let dateNow = new Date();
            logger.info(`seconds passed ${secondsPassed} and Time is ${dateNow}`);
            console.log(`${secondsPassed}`);
            if(dataLog != 130){ //when reaches 130 seconds stops logging
                  dataLog(++secondsPassed);
            }
        },1000);
    }
    

    附图中提到的结果文件

    额外:我创建了具有不同用例的winston示例,可能会有所帮助 https://github.com/shivashanmugam/node-lab/blob/master/winston/index.js

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 2017-11-15
      • 2020-02-04
      • 1970-01-01
      • 2010-12-02
      • 2018-03-25
      • 2015-05-09
      • 2016-12-15
      • 2017-12-19
      相关资源
      最近更新 更多