日志对于问题定位、调试,系统性能调优至关重要,尤其是系统复杂以及在线运行的情况下。
好的开发框架都会有一个可开启关闭/可配置记录级别的日志系统。我们从以下几个方面来做选型:
1. 每行日志都需要有准确无误的时间戳
2. 日志格式容易被人理解同时也容易被计算机进行分析处理
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');