日志对于问题定位、调试,系统性能调优至关重要,尤其是系统复杂以及在线执行的情况下。

好的开发框架都会有一个可开启关闭/可配置记录级别的日志系统。我们从下面几个方面来做选型:

1. 每行日志都须要有准确无误的时间戳

2. 日志格式easy被人理解同一时候也easy被计算机进行分析处理

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

Node.js日志框架选型比較:Winston的更多相关文章

  1. Node.js日志框架选型比較:Bunyan

    前一篇Node.js日志框架选型比較:Winston Bunyan Bunyan(by Trent Mick)是另外一个值得考虑的日志框架,以稍微不同的方式处理结构化,机器可读性被重点对待. 其结果是 ...

  2. 强大的 Node.js Web 框架 - Daze.js

    去年年初对 Node.js 比较感兴趣,也用了很多 Node.js 的框架,但是开发体验不是特别好,我之前也是后端转前端,然后再接触 Node.js ,所以用过挺多的服务端框架,相对js而言,设计一款 ...

  3. Node.js Express 框架

    Node.js Express 框架 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP ...

  4. 全端开发必备!10个最好的 Node.js MVC 框架

      Node.js 是最流行的 JavaScript 服务端平台,它允许建立可扩展的 Web 应用程序.Node.js 包含不同类型的框架,如 MVC 框架.全栈框架.REST API  以及大量的服 ...

  5. Koa – 更加强大的下一代 Node.js Web 框架

    Koa 是 Express 的开发团队设计的下一代 Web 框架,其目的是为 Web 应用程序提供更小,更具表现力,更坚实的基础.Koa 没有核捆绑任何中间件,并提供了一​​套优雅的方法,使服务器端开 ...

  6. 【360开源】thinkjs:基于Promise的Node.js MVC框架 (转)

    thinkjs是360奇舞团开源的一款Node.js MVC框架,该框架底层基于Promise来实现,很好的解决了Node.js里异步回调的问题.360奇舞团(奇虎75Team),是奇虎360公司We ...

  7. Node.js Express框架

    Express 介绍 Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序. 它有助于基于Node Web应用程序的快速开发.下面是一 ...

  8. 十款最佳Node.js MVC框架

    十款最佳Node.js MVC框架摘要:Node.js是JavaScript中最为流行的框架之一,易于创建可扩展的Web应用.本文分享十款最佳的JavaScript框架. Node.js是JavaSc ...

  9. Node.js的框架-express

    Node.js的框架 express 是第三方的 express const express=require('express'); const app=express(); const PORT=3 ...

随机推荐

  1. 微软Visual Studio "14" CTP 2 公布

     对于在微软阵营下进行工作的团队来说,拥有最新版本号的Visual Studio是提高效率最佳的选择,没有之中的一个. 在本文中,我们就上个月公布的Visual Studio "14&q ...

  2. WebGL 支持测试,并已支持的浏览器版本摘要

    WebGL 支持情况检測与已支持浏览器版本号汇总 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公 ...

  3. ABP展现层——Javascript函数库

    ABP展现层——Javascript函数库 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.N ...

  4. 浅谈SQL注入风险 - 一个Login拿下Server(转)

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  5. IntelliJ IDEA于Make Project时报:子字符串不是票面金额的结束、非法的表达式显示启动

    IntelliJ IDEA于Make Project当系统提示很多错误,什么孩子不是字符串票面金额的结束.非法的表达式显示启动-- 解决方法是改变File Encoding,更改方法:File > ...

  6. 采用xshell链路本地虚拟机Linux

    昨天想安装在自己的机器看Linux.而使用xshell通路.但是这花了很长的时间,于xshell结束所有的提示"Could not connect to '192.168.54.100' ( ...

  7. TreeMap cannot be cast to java.lang.Comparable

    /** * Constructs a new, empty tree map, using the natural ordering of its * keys. All keys inserted ...

  8. Stopwatch计时器、秒表 C#

    .NET2.0也提供了这样一个秒表:Stopwatch类,它可以比较精确地测量时间. 速度测试: 软件的性能和可测性是一个复杂的主题.要确保应用程序能够满足用户的期望,就需要在开发周期内考虑它的性能和 ...

  9. EF中的transaction的使用范例

    注意一点: 在EF中使用事物后,对于一个新增的model,在saveChanges后,可以得到该实体的自增ID,但在提交事物之前, 该数据并没有真正的新增到DB中,但此时可以得到model新增的自增I ...

  10. bigdata_Hadoop jps出现process information unavailable提示解决办法

    启动Hadoop之后,使用jps命令查看当前系统的java进程情况,显示: hduser@jack:/usr/local/hadoop$ jps 18470 SecondaryNameNode 190 ...