9 个 Node.js 记录器库,您可以尝试获得更好的记录
已发表: 2022-09-01您是否正在为调试代码而苦苦挣扎? 您是否正在寻找一些可能使调试更容易的日志记录解决方案? 请继续阅读以了解更多信息。
软件开发经历了几个阶段:需求收集、分析、编码、测试和维护。 在所有这些阶段中,编码/开发阶段需要大量时间和精力。 软件工程师处理语法错误、逻辑错误和运行时错误。 语法错误是在编译时识别出来的,并且由于代码不遵守编程语言的规则而发生。

另一方面,集成开发环境 (IDE) 无法识别逻辑和运行时错误,并且通常难以调试和修复。 解决错误是一个耗时的过程,需要大量的调试。
调试是一个试图理解为什么编写的代码没有按预期工作的过程。 当我们知道错误以及代码中发生错误的确切行时,很容易解决问题。 因此,日志记录对于调试代码非常有用。
什么是日志记录?
日志记录是一种在程序执行期间捕获消息的技术。 必须只记录那些消息,这可以帮助他们进行调试。 因此,知道何时将日志语句添加到代码中非常重要。 此外,区分日志语句同样重要。 日志记录有不同的级别,例如信息、警告、错误、调试和详细。 错误和警告语句用于异常处理。

从函数返回的数据、数组操作后的结果、从 API 检索的数据等,都是可以使用 info 语句记录的数据的一些示例。 调试和详细日志用于给出错误的详细描述。
调试日志提供有关堆栈跟踪、输入输出参数等的信息。“详细”不如“调试”日志详细,但提供了所有已发生事件的列表。 日志被写入控制台、文件和输出流。 日志管理工具可用于结构化和格式化的日志记录。
Node.js 日志记录
Nodejs 是一个 JavaScript 运行时环境。 Node.js 应用程序是异步和非阻塞的,用于数据密集型和实时系统。 了解更多关于 Node.js 的最佳方式是阅读 Node.js 教程及其文档。 日志记录是提高性能、故障排除和错误跟踪所必需的。 可以使用内置函数 console.log 登录 Node.js。 此外,调试功能与多个软件包相互关联,可以有效使用。
中间件用于管理请求和响应。 中间件可以是应用程序或任何其他 Javascript 框架。 可以通过应用程序和路由器登录中间件。 任何 Node.js 记录器都必须使用 npm 或 yarn install 命令来安装记录器。
Npm 代表“Node Package Manager”,YARN 代表“Yet Another Resource Negotiator”。 然而,Yarn 比 npm 更受欢迎,因为它更快并且可以并行安装包。

下面列出了一些最好的 Node.js 记录器:
皮诺
Pino 是一个库,它是 Node.js 应用程序的最佳记录器之一。 它是开源的,速度极快,并以易于阅读的 JSON 格式记录语句。 一些 Pino 日志级别是 - 调试、警告、错误和信息消息。 项目中可以导入一个 Pino logger 实例,console.log 语句必须替换为 logger.info 语句。
使用以下命令安装 Pino:
$ npm install pino
生成的日志是详尽的,采用 JSON 格式,突出显示日志的行号、日志类型、记录时间等。Pino 将应用程序中的日志记录开销降至最低,并且在处理日志时非常灵活。
Pino 可以与 Hapi、Restify、Express 等 Web 框架集成。Pino 生成的日志也可以存储在文件中。 它使用 Worker 线程进行操作,并且与 TypeScript 兼容。
温斯顿
Winston 支持各种 Web 框架的日志记录,主要关注灵活性和可扩展性。 它支持多种传输方式,可以将日志存储在不同的文件位置。 传输是存储日志消息的地方。
除了一些内置的传输,如 Http、Console、File 和 Stream,它还支持其他传输,如 Cloud watch 和 MongoDB。 它在各种级别和格式下进行日志记录。 日志记录级别指示问题的严重性。
各种日志记录级别如下所示:
{ error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6 }
日志输出格式也可以自定义、过滤和组合。 日志包括有关时间戳、与日志关联的标签、从前一个日志经过的毫秒数等信息。
Winston 还处理异常和未捕获的承诺。 它提供了额外的功能,例如查询运行时归档、流式日志等。首先,必须安装 Winston。 然后,创建一个 Winston 配置对象以及传输,用于存储日志。 使用 createLogger() 函数创建一个记录器对象,并将日志消息传递给它。
节点班扬
Bunyan 用于以 JSON 格式快速登录 node.js。 它还提供了用于查看日志的 CLI(命令行界面)工具。 它是轻量级的,支持各种运行时环境,如 Node.js、Browserify、WebPack 和 NW.js。 使用漂亮的打印功能进一步美化了日志的 JSON 格式。 日志有致命、错误、警告、信息、调试和跟踪等各种级别; 每个都与一个数值相关联。

记录高于为实例设置的级别的所有级别。 Bunyan 流是记录输出的地方。 可以使用 log.child() 函数记录应用程序的子组件。 所有子记录器都绑定到特定的父应用程序。 流类型可以是文件、旋转文件、原始数据等。定义流的代码示例如下所示:
var bunyan = require('bunyan'); var log = bunyan.createLogger({ name: "foo", streams: [ { stream: process.stderr, level: "debug" }, ... ] });
Bunyan 还支持 DTrace 日志记录。 DTrace 日志记录涉及的探针包括 log-trace、log-warn、log-error、log-info、log-debug 和 log-fatal。 Bunyan 使用序列化程序以 JSON 格式生成日志。 序列化程序函数不会抛出异常并且是防御性的。

日志级别
Loglevel 用于登录 Javascript 应用程序。 它也是 Node.js 最好的记录器之一,因为它轻量级且简单。 它记录给定的级别并使用一个不依赖于日志记录的文件。 默认日志级别为“警告”。 日志输出与行号一起格式化。 用于记录的一些方法是跟踪、调试、警告、错误和信息。
他们在任何环境中都能适应失败。 getLogger() 是用于检索记录器对象的方法。 它也可以与其他插件组合以扩展其功能。 一些插件包括 loglevel-plugin-prefix、loglevel-plugin-remote、ServerSend 和 DEBUG。 将前缀消息添加到日志记录的插件如下所示:
var originalFactory = log.methodFactory; log.methodFactory = function (methodName, logLevel, loggerName) { var rawMethod = originalFactory(methodName, logLevel, loggerName); return function (message) { rawMethod("Newsflash: " + message); }; }; log.setLevel(log.getLevel()); // Be sure to call setLevel method in order to apply plugin
构建使用 npm run dist 命令运行,测试可以使用 npm test 命令运行。 日志级别支持 Webjar、Bower 和 Atmosphere 包。 每当添加新功能时,都会发布新版本的 Loglevel。
信号
Signale 由 19 个用于 Javascript 应用程序的记录器组成。 它支持 TypeScript 和范围日志记录。 它由帮助记录时间戳、数据和文件名的计时器组成。 除了 await、complete、fatal、fav、info 等 19 个记录器之外,还可以创建自定义日志。
通过使用记录器数据定义 JSON 对象和字段来创建自定义日志。 还可以创建交互式记录器。 当交互式记录器设置为 true 时,来自交互式记录器的新值会覆盖旧值。

Signale 最好的部分是过滤掉秘密或敏感信息的能力。 多个秘密存储在一个数组中。 addSecrets() 和 clearSecrets() 是用于添加和清除数组中的秘密的函数。 Boostnote、Docz、Shower、Taskbook 和 Vant 使用 Signale 进行日志记录。 从 Signale 调用 API 的语法如下:
signale.<logger>(message[,message]|messageObj|errorObj)
在撰写本文时,Signale 的下载量已超过 100 万次。
示踪剂
Tracer 用于生成详细的日志记录消息。 记录消息由时间戳、文件名、行号和方法名组成。 可以安装帮助程序包来自定义输出日志格式。 可以使用以下命令安装帮助程序包。
npm install -dev tracer
Tracer 支持文件、流和 MongoDB 传输。 它支持日志中的颜色控制台和过滤条件。 最初,必须使用 npm install 安装跟踪器。 其次,必须创建一个记录器对象,并且必须选择控制台类型。 然后,可以在对象上指定各种日志级别或类型以进行进一步的日志记录。
自定义过滤器可以通过定义与函数体中存在的业务逻辑的同步函数来创建。 tinytim 等微模板也可用于系统日志记录。
小屋.js
Cabin 用于 node.js 应用程序的服务器和客户端日志记录。 它用于需要屏蔽敏感和关键信息的地方。 这包括信用卡号、BasicAuth 标头、盐、密码、CSRF 令牌和银行帐号。 下面的代码片段显示了使用 Cabin.js 进行日志记录。
const Cabin = require('cabin'); const cabin = new Cabin(); cabin.info('hello world'); cabin.error(new Error('oops!'));
它由 1600 多个字段名称组成。 它还遵循自带记录器 (BYOL) 的原则。 这使其与 Axe、Pino、Bunyan、Winston 等各种其他记录器兼容。由于自动流和 Cabin 缓冲区,它降低了磁盘中的存储成本。 它是跨平台兼容的并且易于调试。
服务器端日志记录需要使用中间件进行路由和自动输出日志记录。 浏览器端日志记录需要 XHR 请求和脚本。 它使用 Ax 来显示元数据,即有关数据、堆栈跟踪和其他错误的数据。 SHOW_STACK 和 SHOW_META 是布尔变量,设置为 true 或 false 以显示或隐藏堆栈跟踪和元数据。
日志
Npmlog 是 npm 使用的一种基本类型的记录器。 使用的一些日志记录方法是 level、record、maxRecordSize、prefixStyle、heading 和 stream。 它还支持彩色日志记录。 各种日志记录级别是 silly、verbose、info、warn、http 和 error。 使用 npm 日志的示例代码片段如下所示。
var log = require('npmlog') // additional stuff ---------------------------+ // message ----------+ | // prefix ----+ | | // level -+ | | | // vvvv log.info('fyi', 'I have a kitty cat: %j', myKittyCat)
如果将“Infinity”指定为日志级别,则会抑制所有消息。 如果将“-Infinity”指定为日志级别,则必须启用查看日志消息的选项才能查看日志。
事件和消息对象用于记录。 使用前缀事件时会发出前缀消息。 样式对象用于格式化日志,例如为文本和背景添加颜色,字体样式如粗体、斜体、下划线等。一些 npm 日志包是 brolog、npmlogger、npmdate log 等。
咆哮
Roarr 是 Node.js 的记录器,不需要初始化并生成结构化数据。 它有 CLI 和环境变量。 它与浏览器兼容。 可以和Fastify、Fastify、Elastic Search等集成,可以区分应用代码和依赖代码。 每条日志消息都由上下文、消息、序列、时间和版本组成。 各种日志级别包括跟踪、调试、信息、警告、错误和致命。 关于如何完成日志记录的示例代码片段是 Roarr,如下所示:
import { ROARR, } from 'roarr'; ROARR.write = (message) => { console.log(JSON.parse(message)); };
此外,可以对错误进行序列化,这意味着可以将带有错误的实例与对象的上下文一起记录下来。 一些特定于 Node.js 和 Roarr 的环境变量是 ROARR_LOG 和 ROARR_STREAM。 “采用”是一个与 node.js 一起使用的函数,用于将上下文属性传递到各个级别。 在记录时,子函数也可以与中间件一起使用。
最后的话
日志记录是一种在程序执行期间跟踪各种活动和事件的方法。 日志在代码调试中起着至关重要的作用。 它还有助于提高代码的可读性。 Node.js 是一个开源的 javascript 运行时环境。 一些最好的 Node.js 记录器是 Pino、Winston、Bunyan、Signale、Tracer、Npmlog 等。每种类型的记录器都有自己的功能,例如分析、过滤、流式传输和传输。
有些记录器支持彩色控制台,有些则适合处理敏感信息。 详细和格式化的日志在开发人员尝试修复代码中的错误时为他们提供了最大的帮助。 JSON 格式通常是日志记录的首选,因为它以键值对的形式记录数据,使其对用户友好。
记录器还可以与其他应用程序集成,并且与多浏览器兼容。 在选择要使用的记录器类型之前,始终建议先了解您正在构建的需求和应用程序。
您还可以查看如何在 Windows 和 macOS 上安装 Node.js 和 NPM。