2012-07-09 150 views
29

如何在使用Winston處理node.js的日誌時旋轉日誌。也就是說,如何爲應用程序運行的每一天創建一個新文件?Winston:如何旋轉日誌

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

+1 - 好問題!作爲一個純粹的猜測,可能會編寫自己的傳輸文件記錄器,它會記錄如何登錄的選項(類似於IIS和其他Web服務器)? – bryanmac 2012-07-09 22:24:49

回答

17

溫斯頓的作者和維護者在這裏。

每天登錄到新文件當前是一項公開功能請求:https://github.com/flatiron/winston/issues/10。很想看到有人實施它。

也就是說,還有其他選擇:

  1. 文件傳輸接受最大範圍的選擇,當超過字節一定的規模,這將旋轉日誌文件。

  2. 還擁有一個新的傳輸的開放式拉請求,我還沒有機會真正深入到「fileRotate」,這似乎確實這種基於日期的旋轉:https://github.com/flatiron/winston/pull/120/files

+0

查理,非常感謝! – Sparky1 2012-07-10 16:36:47

+0

解決方案:https://gist.github.com/suprememoocow/5133080 – DDS 2013-10-24 14:44:08

+1

此傳輸已添加到其自己的npm模塊中:https://github.com/winstonjs/winston-daily-rotate-file – 2015-12-04 12:58:20

3

winston-filerotatedate筆者是一個:

文件傳輸溫斯頓允許日誌文件,以根據大小和時間進行旋轉。

文件傳輸通過「文件名」選項接受文件名並將該文件用作主日誌記錄目標。 如果文件增長超過'maxsize'字節,則當前日誌文件將被重命名並創建一個新的主日誌磁貼。 重命名的日誌文件的名稱形如「basenameYYYYMMDD [a-z] .bak」。

可用選項有:

  • 級別:,這種運輸時應日誌信息的級別。
  • silent:指示是否抑制輸出的布爾標誌。
  • timestamp:布爾標誌,指示是否應該用時間戳預先輸出輸出(默認值爲true)。如果指定了函數,則將使用其返回值而不是時間戳。
  • 文件名:要寫入輸出的日誌文件的文件名。
  • 目錄名稱:日誌文件將在
  • MAXSIZE創建該文件夾:最大規模的日誌文件的字節數,如果超過了大小,然後創建一個新的文件。
  • json:如果爲true,則消息將記錄爲JSON(默認值爲true)。
20

該功能存在,我們正在生產中使用它,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 
     }) 
    ] 
}); 
+1

它已更改:https://github.com/winstonjs/winston/blob/d4fdbadc2f4ab8408261497a116ef80e0f9475a0/CHANGELOG.md#user-content-v200--2015-10-29 – lastboy 2016-08-01 11:59:05

0

您可以使用下面的代碼,以每天旋轉日誌文件:

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