日誌對於問題定位、調試,系統性能調優相當重要,尤爲是系統複雜以及在線執行的狀況下。javascript
好的開發框架都會有一個可開啓關閉/可配置記錄級別的日誌系統。咱們從下面幾個方面來作選型:java
1. 每行日誌都需要有準確無誤的時間戳node
2. 日誌格式easy被人理解同一時候也easy被計算機進行分析處理npm
3. 贊成配置不一樣的日誌輸出,比方對於不一樣級別的日誌配置不一樣的處理方式框架
基於上述的要求,有兩款Node.js框架脫穎而出,各自是Bunyan和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');兩段代碼都會產生下面輸出:
winston.info('Hello world!', {timestamp: Date.now(), pid: process.pid});輸出例如如下,信息更豐富,但依舊不那麼適合機器處理。
winston.log('info', 'test message %d', 123);
winston.add(require('winston-irc'), { host: 'irc.somewhere.net', nick: 'logger', pass: 'hunter2', channels: { '#logs': true, 'sysadmin': ['warn', 'error'] } });
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');