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

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

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

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日志框架选型比較:Bunyan

时间: 2025-01-03 14:19:23

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

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

前一篇Node.js日志框架选型比較:Winston Bunyan Bunyan(by Trent Mick)是另外一个值得考虑的日志框架,以稍微不同的方式处理结构化,机器可读性被重点对待. 其结果是,bunyan每行日志记录实际上就是JSON.stringify的一个输出. 安装(Installation) npm install bunyan 使用(Usage) var bunyan= require('bunyan');var log=bunyan.createLogger({name:'

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

thinkjs是360奇舞团开源的一款Node.js MVC框架,该框架底层基于Promise来实现,很好的解决了Node.js里异步回调的问题.360奇舞团(奇虎75Team),是奇虎360公司Web平台部前端工程师与部分特约嘉宾组成的一个前端团队. thinkjs主要特性有: 支持Http.命令行.WebSocket.Restful等多种访问方式: 项目实行“C(Core)+B(Behavior)+D(Driver)”架构: Model高度封装,无需手写SQL语句: 封装了数据库(DB).会

10个最好的 Node.js MVC 框架

Node.js 是最流行的 JavaScript 服务端平台,它允许建立可扩展的 Web 应用程序.Node.js 包含不同类型的框架,如 MVC 框架.全栈框架.REST API  以及大量的服务器库,使它能够快速构建 Web 服务器,而无需使用外部软件(如 Apache 和 Lighttpd 等).这些框架使得它更加用户友好,易于使用,还支持众多的特性和功能,只要按照几个步骤就可以开发出庞大的 Web 应用程序. 1) Sails js Sails 是一款优秀的框架,可以很容易地开发定制的,

Node.js Express 框架

Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网站. Express 框架核心特性: 可以设置中间件来响应 HTTP 请求. 定义了路由表用于执行不同的 HTTP 请求动作. 可以通过向模板传递参数来动态渲染 HTML 页面. 安装 Express 安装 Express 并将其保存到依赖列表中: $ cnpm install

Node.js Express 框架学习

转载:http://JavaScript.ruanyifeng.com/nodejs/express.html#toc0 感觉很牛的样子,不过觉得对初学者没太大用,里面很多例子用的api都没有详细的说明.为了学习备份,所以拷贝过来. Express框架 来自<JavaScript 标准参考教程(alpha)>,by 阮一峰 目录 概述 运行原理 底层:http模块 对http模块的再包装 什么是中间件 use方法 Express的方法 all方法和HTTP动词方法 set方法 response

Node.js应用层框架Bearcat概述

Bearcat是一个来自于网易的基于POJOs进行开发的应用层框架, Bearcat提供了一个轻量级的容器来编写简单,可维护的node.js. Bearcat 提供了一个基础的底层来管理应用逻辑对象,使得开发者就可以把精力放在应用层的逻辑编写上. Bearcat 使开发者编写"简单纯粹的javaScript对象"(POJO), 并且不会侵入这些POJO,你完全可以在不使用Bearcat的环境下部署应用这些POJO. Bearcat 概览Bearcat 包括几个部分,包括: 核心容器核心

Node.js ORM框架Sequelize(一)搭建服务

需要准备的环境:node.js  mysql 1.在本地创建一个文件夹 2.执行npm init 创建成一个Node包,执行成功后文件夹里会有一个json文件 3.安装Sequelize 4.在文件夹中创建一个js文件(index.js) 5.(在命令行中运行node index.js检查是否链接成功) 需要开启MySql数据库 如果有错或者有宝贵建议留言给作者

Node.js ORM框架Sequlize之表间关系

Sequelize模型之间存在关联关系,这些关系代表了数据库中对应表之间的主/外键关系.基于模型关系可以实现关联表之间的连接查询.更新.删除等操作.本文将通过一个示例,介绍模型的定义,创建模型关联关系,模型与关联关系同步数据库,及关系模型的增.删.改.查操作. 数据库中的表之间存在一定的关联关系,表之间的关系基于主/外键进行关联.创建约束等.关系表中的数据分为1对1(1:1).1对多(1:M).多对多(N:M)三种关联关系. 在Sequelize中建立关联关系,通过调用模型(源模型)的belon

解决node.js express框架的跨域问题;

在引用路由之前写下如下代码: app.use('*', function(req, res, next) {res.header("Access-Control-Allow-Origin", "*");res.header("Access-Control-Allow-Headers",'Content-Type,Content-Length, Authorization, Accept,X-Requested-With');res.header(