7 个最佳Node.js日志记录库和聚合器

news2024/11/26 12:34:04

日志记录是软件测试的重要组成部分。当我们知道错误是什么以及代码中出现问题的确切行时,调试应用程序要容易得多。

在本文中,我们将探讨与 Node.js 中的日志记录相关的各种概念,包括七个流行的日志记录库和聚合器,您可以使用它们来简化调试。

什么是日志记录?

语法错误 - 当一段代码不遵守语言规则时发生 - 可以在运行时识别。运行代码后,IDE 会检测这些错误并将其记录在终端上:

Example Error Logged On Terminal By Ide After Running Code With Description Of Issue And Lines Of Code Responsible

错误消息说明了问题,并标识了代码中导致错误的确切行,为我们提供了解决问题所需的所有信息。

但是,与语法错误不同,IDE 无法识别逻辑和运行时错误,并且可能很难调试。解决此类错误的最简单方法是在程序执行时使用程序中的日志记录技术在终端上打印消息。

可以记录代码中不同位置的语句,以便在遇到错误或 bug 时更轻松地进行调试。例如,如果您正在使用 API,则可以记录 API 的响应数据以检查数据或确保返回正确的数据结构:

Example Logged Api Response Data

您还可以在函数正文中记录消息。这样,如果遇到错误,您可以检查记录的消息,以确定运行和未运行的函数,从而可以轻松地从那里跟踪并调试代码。

什么是日志记录库?

日志记录库是一种插件,可帮助您从应用程序生成和管理日志数据。

使用第三方记录器最好的部分是您无需自己编写代码。您只需使用适当的 npm 或 Yarn 安装命令即可安装记录器。

大多数日志记录库都支持最常见的日志记录级别,例如信息、调试、警告和错误。您可以创建自己的自定义关卡并配置其样式。它们还支持不同的传输模式(文件、HTTP、流和控制台)。

在Node.js打日志

请务必遵循 Node.js 中日志记录的最佳做法,以使调试工作尽可能高效。确保您熟悉各种控制台消息、日志级别和其他日志记录基础知识。

一种 Node.js 日志记录方法是通过路由器和应用程序在中间件内执行日志记录,例如使用Express中间件的示例:

Example Node Js Logging Method Using Express Middleware

路由器可以配置为记录请求、响应、错误和其他可用于调试应用程序的信息。

您还可以使用 npm 或 Yarn 安装第三方日志记录库和聚合器。在下面的部分中,我们将探讨一些适用于 Node.js 的最佳记录器,包括 Grafana LokiPino 等。

1.Pino

如果你想要一个简单的记录器,开箱即用,Pino 是一个优秀的 Node.js 记录器选项。与其他一些日志记录解决方案不同,Pino不需要太多配置或外部依赖项。

使Pino成为最好的Node.js记录器之一的一些因素是,它可以免费使用,不断维护,并具有大量功能,包括漂亮的打印、异步日志记录、传输和日志处理、捆绑支持和低开销。

Pino 使用 JSON 格式化日志语句,这使得它们易于阅读。支持的日志级别包括 debug 、 warn 、error和 info :

Example Pino Log Statements Of Different Levels Using Json For Ease Of Reading

要使用 npm 进行安装,请运行:

$ npm install pino

成功安装 Pino 后,您可以将 Pino 记录器实例导入到项目中。请注意,您需要将语句替换为 console.loglogger.info 语句 — 如果需要,您可以查看 Pino 文档以获取一些示例。

您可以将Pino与许多Web框架一起使用,包括FastifyExpressKoaNest.jsNestifyHappi和Node核心的HTTP。

为避免兼容性问题,我们建议在安装 Pino 记录器之前在您的计算机上本地运行 Node.js v16 或更高版本。这将保证某些高级和现代功能都按预期运行。

2.Bunyan

Bunyan 是一个简单易用的日志记录库,适用于 Node.js 应用程序。它具有优雅的日志方法 API、可扩展的 Steam 系统、序列化程序、日志子项、日志对象的自定义渲染以及用于漂亮打印和过滤 Bunyan 日志的 bunyan CLI 工具:

Example Bunyan Logs

要使用 npm 进行安装,请运行:

npm install bunyan

接下来,创建一个 Logger 实例并调用以日志记录级别命名的方法:

// server.js

var bunyan = require('bunyan');
var log = bunyan.createLogger({name: 'serverapp'});
log.info('server is active');
log.warn({type: 'error'}, 'something went wrong');

与 Pino 和大多数其他日志记录库一样,Bunyan 以易于阅读的 JSON 格式记录语句,并支持各种日志级别,包括 debug 、 warn 、 error 和 info 

Bunyan支持Node.js,Browserify,Webpack和NW.js。

需要注意的是,在撰写本文时,Byan的官方GitHub存储库表明,十多个月来没有对代码进行任何维护。这可能会导致兼容性问题,尤其是对于较新的 Node.js 版本。

如果您使用的是 Node.js v17 或更高版本,最好使用定期维护的日志记录解决方案,如 Pino.js以避免兼容性问题。

3.Cabin.js

Cabin.js 具有比此列表中的其他日志记录库更高级的功能,包括:

  • 自动检测和屏蔽敏感字段名称、信用卡号、社会保险号、BasicAuth 标头、API 密钥等

  • 降低磁盘存储开销

  • 跨平台和跨浏览器兼容性

  • 能够将日志发送到 HTTP 端点、Slack、Sentry 和 Papertrail

要开始使用,请使用 npm 安装您需要的所有内容:

npm install express axe cabin signale

然后,创建快速使用应用程序:

const express = require('express');
const Axe = require('axe');
const Cabin = require('cabin');
const app = express();
const { Signale } = require('signale');

// initialize a new instance of Axe (see below TODO's that appeal to you)
const logger = new Axe({
  logger: new Signale()
});

const cabin = new Cabin({ logger });

app.use(cabin.middleware);

app.get('/', (req, res, next) => res.send('OK'));

// start the server
app.listen(3000);

在上面的代码中,我们创建了一个记录器的实例,并将其传递给 Cabin() 以创建新的cabin对象。然后,我们将 cabin.middleware 属性传递给内部 app.use() 以在应用程序中设置中间件。

有关如何使用Cabin.js的详细指南,请阅读其官方文档。

由于 Cabin.js 比本文中提到的其他日志记录解决方案更先进,因此它需要额外的安装和配置才能工作。

使用Cabin.js的好处是,您将获得更高级的功能,这些功能将极大地使您的应用程序受益,尤其是在安全性方面。代码库也会定期维护,这降低了与Node.js出现兼容性问题的风险。

总之,如果您想要一个提供高级安全功能的可靠日志记录解决方案并且如果您不介意复杂性,请选择 Cabin.js

4.Winston

Winston 是一个简单而通用的日志记录库,具有多个日志记录级别、自定义日志记录、多个传输选项、自定义传输、异常处理、查询日志等等。

要使用 npm 安装 Winston,请运行:

npm i winston

使用Winston的 Winston.createLogger 创建自己的记录器可能是理想的:

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  defaultMeta: { service: 'user-service' },
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' }),
  ],
});

if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console({
    format: winston.format.simple(),
  }));
}

这将创建具有 info 日志记录级别和 JSON 格式的记录器。然后,记录器仅在生产中激活。Winston 支持不同的日志记录级别:

const levels = {
  error: 0,
  warn: 1,
  info: 2,
  http: 3,
  verbose: 4,
  debug: 5,
  silly: 6
};

如果您想了解有关配置和使用Winston记录器的更多信息,请查看他们的官方文档。

Winston内置了大量额外的功能,您可能会在大型项目中发现这些功能很方便。它们包括以下内容:

  • 信息对象过滤 — 在记录时过滤掉特定的信息对象,然后返回 false 值

  • 字符串内插 — 使用 log的 format.splat() 方法将字符串连接在一起

  • 异常处理 — 捕获并记录 uncaughtException 应用程序中的事件

如果您正在寻找更高级的东西,温斯顿是一个很好的选择。源代码是持续维护的,因此该库适用于所有最新的 Node.js 版本。他们的文档也非常详细,并且整理得很好。

5.Grafana Loki

Loki 是一个日志聚合系统,用于存储和查询来自所有应用程序和基础架构的日志。使用 Grafana 日志,您可以从任何来源(本地日志文件、AWS EC2、Kafta)发送和摄取任何格式(JSON、XML、CSV)的日志,从而非常轻松地快速设置日志系统。

Grafana 与 Node.js 集成得很好。您可以通过设置 Node.js 服务器和 Deno 项目轻松使用 Grafana 仪表板来操作数据。

要在 Node.js 项目中安装 Grafana Loki,请创建一个免费的 Grafana Cloud 帐户。执行此操作时,您无需安装、维护或扩展您自己的 Grafana Loki 实例。

Loki 是企业 Node .js 应用程序的经济高效的解决方案。一些最有用的 Grafana 日志功能包括:

  • 如果需要,能够每天从 MB 平滑扩展到 PB

  • 可以处理查询和引入负载的突然峰值

  • 使用与查询指标相同的语法创建查询日志

  • 编写日志查询,允许您动态筛选和转换日志行

  • Cloud Native (Prometheus, Golang, Grafana & K8S)

由于其最小的索引方法,Loki 将同一组日志存储在比其他企业日志记录解决方案更小的存储量中。它记录任何和所有格式,运行成本更低,运行更轻松,并且执行更快的写入和查询。

6.LogLevel

LogLevel 是一个简单而轻量级的 JavaScript 日志记录库。该库取代了通常的控制台日志记录方法,非常适合生产中的应用程序。

它支持典型的日志记录级别(跟踪、调试、信息、警告、错误),如果更具体的日志记录级别不可用 console ,则可以正常回退到这些级别。

在功能方面,LogLevel 非常小。它提供了您将在应用程序中使用的基本日志记录功能,但不允许您重新配置追加程序或添加复杂的日志筛选规则。您最好使用Cabin.js或Winston以获得更高级的功能。

要使用 npm 安装 LogLevel,请运行:

npm install loglevel.

要改为使用 Bower 进行安装,请运行:

bower install loglevel

LogLevel 还提供 WebJars 和 Meteor 的 Atmosphere 包。

要在 Node.js 中进行设置,只需导入库并在对象上调用任何常规控制台日志记录方法,并传入如下消息:

var log = require('loglevel');
log.warn("unreasonably simple");

有关如何使用 LogLevel 的综合指南,请阅读他们的官方文档。

7.Tracer

Tracer是一个强大的Node.js开源库。记录器非常易于定制,支持自定义记录器和输出格式。其功能包括:

  • 支持所有日志记录级别(日志、跟踪、调试等)

  • 用户定义的日志记录级别

  • 自定义格式和过滤器

  • 设置不同类型的传输(日志文件、流、MongoDB)

  • 提供文件信息的堆栈索引

若要开始使用跟踪器,请从 npm 安装包:

npm i tracer

在调用首选的一个或多个控制台方法之前导入记录器:

var logger = require('tracer').console();

logger.log('hello');
logger.trace('hello', 'world');
logger.debug('hello %s',  'world', 123);
logger.info('hello %s %d',  'world', 123, {foo:'bar'});
logger.warn('hello %s %d %j', 'world', 123, {foo:'bar'});
logger.error('hello %s %d %j', 'world', 123, {foo:'bar'}, [1, 2, 3, 4], Object);

该方法在控制台上记录其中每条消息。要了解有关 Tracer 的更多信息,请阅读其官方文档。

请注意,Tracer 的代码库不会定期维护。在撰写本文时,Tracer 的 GitHub 存储库已经一年多没有更新了。这使得Tracer 和较新的 Node.js 版本之间的兼容性问题成为可能。

总结

本文介绍了七个用于在 Node.js 应用程序中记录消息的库。日志记录可帮助您检测和诊断错误、检查来自 API 调用和函数的数据、跟踪程序执行流程以及执行更多操作。

我希望本文能帮助您确定哪些流行的 Node.js 日志记录库最适合您的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/847922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux进阶之路】进程(上)

文章目录 前言一、操作系统加载过程二、进程1.基本概念2.基本信息①运行并观察进程②创建子进程③僵尸与孤儿进程(父子进程衍生出来的问题)1. 僵尸进程(Zombie状态)2. 孤儿进程 3.基本状态①操作系统的状态(统一&#…

计算机视觉--距离变换算法的实战应用

前言: Hello大家好,我是Dream。 计算机视觉CV是人工智能一个非常重要的领域。 在本次的距离变换任务中,我们将使用D4距离度量方法来对图像进行处理。通过这次实验,我们可以更好地理解距离度量在计算机视觉中的应用。希望大家对计算…

栈和队列(二) 队列操作详解及栈与队列的相互实现

文章目录 四、队列1、什么是队列2、队列的基本操作Queue.hQueue.c初始化队列队尾入队列队头出队列获取队列头部元素获取队列队尾元素获取队列中有效元素个数检测队列是否为空,如果为空返回非零结果,如果非空返回0销毁队列 五、设计循环队列六、栈与队列的…

virt-manager上安装ubuntu22.04虚拟机

文章目录 前言一、镜像下载二、 virt-manager新建机器2.1 选择安装来源类型2.2 选择ISO文件2.3 设置CPU数量和内存容量2.4 设置硬盘容量2.5 设置虚拟机类型,勾选配置按钮2.6 修改硬盘驱动类型2.7 修改网卡驱动类型2.8 设置显示器类型2.9 开始安装 三、操作系统安装3…

Von Maur, Inc EDI 需求分析

Von Maur, Inc 是一家历史悠久的卖场,成立于19世纪,总部位于美国。作为一家知名的零售商,Von Maur 主要经营高端时装、家居用品和美妆产品。其使命是为顾客提供优质的产品和无与伦比的购物体验。多年来,Von Maur 凭借其卓越的服务…

计算机视觉应用方向

计算机视觉可以大致有以下几个方向(更详细的可以参考papers with code): 图像分类目标检测图像分割图像生成风格迁移超分辨率 1. 图像分类 图像分类是是视觉识别中的一项基本任务,目的是分辨整个图像并将其分类。 1.1 常用数据…

php使用get和post传递数据出现414 Request-URI Too Large的解决方案

递数据出现414 Request-URI Too Large的解决方案 一、Request-URI Too Large的原因二、GET与POST三、项目分析1.读取源数据2.将读取的到数据,进行传递3.ajax获取传递的数据并传递到后台4.传递数据5.解决方案 一、Request-URI Too Large的原因 “Request-URI Too La…

如果你不只是个点工,那你应该知道 前后端分离与不分离的区别

Web 应用的开发主要有两种模式: 前后端不分离 前后端分离 理解它们的区别有助于我们进行对应产品的测试工作。 前后端不分离 在早期,Web 应用开发主要采用前后端不分离的方式,它是以后端直接渲染模板完成响应为主的一种开发模式。以前后端…

理想汽车:中国电动汽车领域最有投资价值的公司?

来源:猛兽财经 作者:猛兽财经 总结: (1)尽管面临着价格和中国电动汽车市场需求放缓的压力,但理想汽车(LI)在6月份还是交付了32,575辆电动汽车,并且超过了竞争对手蔚来&a…

element-plus:el-date-picker日期只选择年月不要日

<el-date-picker v-model"value" type"month" format"YYYY-MM" value-format"YYYY-MM" />使用format属性将时间显示格式修改为YYYY–MM 年月格式 使用value-format将绑定值的格式修改为YYYY–MM年月格式

DNS解析过程实践分析【nslookup演示】

基本原理 首先一句话概括&#xff0c;DNS就是做域名到IP的映射&#xff0c;rdns表示IP到域名的映射。 怎么映射&#xff0c;其中传递的报文&#xff0c;以及如何进行进行扫描&#xff0c;记录类型都大有讲究。涉及到网络空间测绘当中的DNS扫描&#xff0c;dos也有DNS的相关应…

企升编辑器word编写插件

面向用户群体招投标人员&#xff0c;用统一的模板来编写标书&#xff0c;并最终合并标书。项目经理&#xff0c;编写项目开发计划书&#xff0c;项目验收文档等。开发人员&#xff0c;编写项目需求规格说明书、设计说明书、技术总结等文档。其他文档编写工作量较多的岗位人员。…

小红书 KOL 种草执行策略揭秘:打造爆款产品,提升品牌影响力

随着互联网的普及和社交媒体的发展&#xff0c;小红书成为了众多年轻人购物决策的重要参考平台。小红书 KOL 种草作为一种新兴的营销方式&#xff0c;以其强大的传播力和影响力&#xff0c;越来越受到各大品牌的重视。本文伯乐网络传媒将给大家深入探讨小红书 KOL 种草的执行策…

TS协议概念及传输流程

TS协议之PAT&#xff08;节目关联表&#xff09;TS协议之PMT&#xff08;节目映射表&#xff09;TS协议之PES&#xff08;ES数据包&#xff09; 概要 TS协议是一种媒体流封装协议&#xff0c;类似于MP4&#xff0c;FLV等&#xff0c;可以将编码好的视频流(H164,H265等)和音频…

大数据——推荐系统

1 推荐系统的发展 推荐系统是指面对没有需求的用户在进入产品时&#xff0c;要给用户推荐什么东西&#xff0c;现在的APP基本上都会采用推荐系统。 从一开始的1990s开始的门户网站&#xff0c;像Yahoo、搜狐和Hao123等等&#xff0c;都是基于分类目录的网页导航网站&#xff0…

【Elasticsearch】学好Elasticsearch系列-聚合查询

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 先看后赞&#xff0c;养成习惯。 点赞收藏&#xff0c;人生辉煌。 文章目录 概念doc values 和 fielddatamulti-fields&#xff08;多字段&#xff09;类型聚合分类分桶聚合Histogram 聚合 指标聚合Percentil…

用chatGPT从左右眼图片生成点云数据

左右眼图片 需求 需要将左右眼图像利用视差生成三维点云数据 先问问chatGPT相关知识 进一步问有没有现成的软件 chatGPT提到了OpenCV&#xff0c;我们让chatGPT用OpenCV写一个程序来做这个事情 当然&#xff0c;代码里面会有一些错误&#xff0c;chatGPT写的代码并不会做模…

笔记本WIFI连接无网络【实测有效,不用重启电脑】

笔记本Wifi连接无网络实测有效解决方案 问题描述&#xff1a; 笔记本买来一段时间后&#xff0c;WIFI网络连接开机一段时间还正常连接&#xff0c;但是过一段时间显示网络连接不上&#xff0c;重启电脑太麻烦&#xff0c;选择编写重启网络脚本解决。三步解决问题。 解决方案&a…

蓝牙技术在工业物联网 (IIoT)中的应用_串口透传蓝牙模块

物联网 (IoT) 正在通过托管和可扩展的数字解决方案帮助全球各行各业提高效率。 更具体地说&#xff0c;工业物联网 (IIoT) 侧重于连接石油和天然气、水电以及制造业等关键行业的机器和设备。 在工厂中&#xff0c;连接传感器在机器上的应用被用来收集有价值的数据&#xff0c;用…

标题:使用 Python 的 wxPython 模块生成 PPTX 文档

导语&#xff1a;本文介绍了如何使用 wxPython 模块和 python-pptx 模块来编写一个程序&#xff0c;用于生成包含首页、内容页和感谢页的 PPTX 文档。 介绍 PPTX 文档是一种常用的演示文稿格式&#xff0c;用于展示和分享信息。在本文中&#xff0c;我们将使用 Python 的 wxP…