2

NPM酷库,每天两分钟,了解一个流行NPM库。

昨天,我们认识了debug库的用法,用来控制输出调试日志。但是,debug的特性适合于开发调试,并不适合程序记录运行日志。

今天我们再了解一个日志记录的库:winston,一个多路传输的日志记录库。

所谓多路传输,是指,你可以自定义多个日志储存驱动,比如,将日志输出到终端的同时,将重要日志记录到文件中,甚至写到数据库中。

winston 用法

winston 支持RFC5424标准的日志等级,即debug/info/notice/warning/error等,每一个日志等级都实现为一个函数,你可以直接调用对应的函数,来表明你想要输出日志的重要程度。

const winston = require('winston');
 
winston.log('info', 'Hello distributed log files!');
winston.info('Hello again distributed logs');

winston.level = 'debug';
winston.log('debug', 'Now my debug messages are written to console!');

配置多路日志传输

winston.configure({
  transports: [
    new (winston.transports.Console)(),
    new (winston.transports.File)({ filename: 'somefile.log' })
  ]
});

上方代码中就为winston设置了两个日志储存驱动,winston会直接将日志输出到控制台,同时,将日志保存在 somefile.log 文件中。

实例化Logger对象

在前文中,我们使用的是 winston 默认的日志器对象(Logger),默认的Logger方便我们直接访问winston接口,此外,我们还可以实例化一个我们需要的Logger对象:

const logger = new winston.Logger({
  level: 'error',
  transports: [
    new (winston.transports.Console)(),
    new (winston.transports.File)({ filename: 'somefile.log' })
  ]
});

在上述代码中,我们实例化了一个新的Logger对象,并且指定了logger实例的日志记录级别为error。当然,你仍然可以调用 logger.info('info text') 来输出info级别的日志,但这些日志会被过滤掉,winston只会讲error级别以上的日志输出到控制台和文件中。那么,我们能不能自定义不同日志存储驱动的级别呢?

为存储驱动定义不同日志级别

const logger = new (winston.Logger)({
  transports: [
    new (winston.transports.File)({
      name: 'info-file',
      filename: 'filelog-info.log',
      level: 'info'
    }),
    new (winston.transports.File)({
      name: 'error-file',
      filename: 'filelog-error.log',
      level: 'error'
    })
  ]
});

在上述代码中,我们将日志同时输出到两个文件中,其中一个只用来保存 error 级别以上的错误日志,另外一个则用来保存info级别以上的详细日志信息。

其他用法

winston 提供了非常强大的功能来适应不同的日志记录场景,NPM酷库文章的目的仅仅是让你了解到在某个应用领域有哪些库可以大概解决某些问题,在你将来的工作中,可以快速从脑海中检索到相关的库,但是并不需要你认真学习每一个库的每一个用法。所以,篇幅所限,winston的其他方面的用法就不再叙述,如果恰巧你当前工作需要winston之类的库,你可以再深入研究winston和其他参考资料。

参考资料

winston: https://github.com/winstonjs/...

RFC 5424: https://tools.ietf.org/html/r...

欢迎关注公众号:梁兴臣

梁兴臣

每天了解一个NPM库,一年后成为Node.js高手


脉冲云_梁兴臣
616 声望194 粉丝

脉冲云CTO,JS全栈开发,DevOps实施,开发体验优化,开发效率提升