Node.js日誌框架選型比較:Winston

日誌對於問題定位、調試,系統性能調優相當重要,尤爲是系統複雜以及在線執行的狀況下。javascript

好的開發框架都會有一個可開啓關閉/可配置記錄級別的日誌系統。咱們從下面幾個方面來作選型:java

1. 每行日誌都需要有準確無誤的時間戳node

2. 日誌格式easy被人理解同一時候也easy被計算機進行分析處理npm

3. 贊成配置不一樣的日誌輸出,比方對於不一樣級別的日誌配置不一樣的處理方式框架

基於上述的要求,有兩款Node.js框架脫穎而出,各自是Bunyan和Winston。函數

  • Bunyan by Trent Mick.
  • Winston(Flatiron 框架的一部分),由nodejitstu贊助.

Winston

Winston是Node.js最流行的日誌框架之中的一個,設計爲一個簡單通用的日誌庫,支持多傳輸(在Winston中,一個傳輸實質上表明儲存設備,也就是數據終於保存在哪裏),每個Winston實例都可以對不一樣級別的日誌配置不一樣的傳輸。
安裝(Installation)
npm install winston
使用(Usage)
最主要的方式是使用Winston模塊輸出的默認日誌對象實例。
var winston = require('winston');
winston.log('info', 'Hello distributed log files!');
winston.info('Hello again distributed logs');
上述代碼和下述代碼效果同樣
var winston = require('winston');
var logger = new winston.Logger();
 
logger.log('info', 'Hello distributed log files!');
logger.info('Hello again distributed logs');
兩段代碼都會產生下面輸出:
info: Hello distributed log files!
info: Hello again distributed logs
格式化(Formatting)
默認格式化器缺乏細節信息,沒有時間戳、機器名和進程號,輸出格式也不那麼適合機器處理。你可以獲得所有信息,僅僅是得本身略微多作點工做。
winston.info('Hello world!', {timestamp: Date.now(), pid: process.pid});
輸出例如如下,信息更豐富,但依舊不那麼適合機器處理。
info: Hello world! timestamp=1402286804314, pid=80481
最後,log方法提供了和util.format同樣的字符串添補方法,比方:
winston.log('info', 'test message %d', 123);
傳輸(Transporters)
Winston可以經過構造函數的參數進行配置,或者經過暴露的接口方法,在GitHub上都有詳盡的描寫敘述。
配置主要是和傳輸有關,默認狀況下,傳輸使用console和文件,只是在npmjs.org站點上可以看到有各類各樣的由社區貢獻的模塊,從MongoDB到其它第三方商用平臺。
當中一個比較值得一提的是winston-irc,你可以用來把日誌輸出到你的團隊的IRC渠道,這看來很方便。
winston.add(require('winston-irc'), {
  host: 'irc.somewhere.net',
  nick: 'logger',
  pass: 'hunter2',
  channels: {
    '#logs': true,
    'sysadmin': ['warn', 'error']
  }
});
多個日誌實例(Multiple Loggers)
當應用規模增加時,可能需要針對不一樣的功能領域配置不一樣的日誌,這可以經過winston.loggers(其實是winston.Container的實例)來實現
winston.loggers.add('category1', {console: { ... }, file: { ... }});
winston.loggers.add('category2', {irc: { ... }, file: { ... }});
這樣你就可以在應用的不論什麼地方訪問上述的預設置好的日誌實例:
var category1 = winston.loggers.get('category1');
category1.info('logging from your IoC container-based logger');

相關文章
相關標籤/搜索