9个Node.js日志库,您可以尝试以获得更好的日志记录。

你正在为调试代码而苦苦挣扎吗?您正在寻找一些可能使调试更容易的日志记录解决方案吗?继续阅读以了解更多信息。

软件开发经历了几个阶段:需求收集、分析、编码、测试和维护。在所有这些阶段中,编码/开发阶段需要大量的时间和精力。软件工程师要处理语法错误、逻辑错误和运行时错误。语法错误在编译时被识别出来,是由代码不遵守编程语言规则造成的。

另一方面,逻辑错误和运行时错误无法由集成开发环境(IDE)识别出来,通常很难调试和修复。解决错误是一个耗时的过程,需要大量的调试。

调试是一个过程,在该过程中,人们试图理解为什么编写的代码不按预期工作。当我们知道错误和代码中出现错误的确切行时,解决问题就很容易。因此,日志记录对于调试代码非常有用。

什么是日志记录?

日志记录是一种在程序执行期间捕获消息的技术。人们只需记录那些可以帮助他们进行调试的消息。因此,知道何时向代码中添加日志语句非常重要。此外,区分日志语句同样很重要。日志记录中有不同的级别,如信息、警告、错误、调试和详细。错误和警告语句用于 exception handling

通过信息语句可以记录从函数返回的数据、数组操作后的结果、从API检索的数据等。调试和详细日志用于提供错误的详细描述。

调试日志提供有关堆栈跟踪、输入输出参数等的信息。“详细”日志不像“调试”日志那样详细,但提供了发生的所有事件的列表。日志被写入控制台、文件和输出流。可以使用日志管理工具进行结构化和格式化日志记录。

Node.js 日志记录

Node.js是一个JavaScript运行时环境。Node.js应用程序是异步和非阻塞的,用于数据密集型和实时系统。了解有关Node.js的更多信息的最佳方法是阅读Node.js教程和其 documentation。日志记录对于提高性能、故障排除和错误跟踪是必需的。在Node.js中,可以使用内置函数console.log进行日志记录。此外,调试函数与多个包相互关联,可以有效地使用。

中间件用于管理请求和响应。中间件可以是应用程序或任何其他JavaScript框架。在中间件中进行日志记录可以通过应用程序和路由器来实现。任何Node.js日志记录器都必须使用npm或yarn install命令来安装日志记录器。

Npm代表“Node Package Manager”,YARN代表“Yet Another Resource Negotiator”。然而,由于Yarn更快且可以并行安装软件包,因此优先使用Yarn。

以下是一些最佳的Node.js日志记录器:

Pino

Pino 是一个适用于Node.js应用程序的最佳日志记录器库。它是开源的,非常快速,并以易于阅读的JSON格式记录语句。Pino日志级别包括-调试、警告、错误和信息消息。可以将Pino记录器实例导入到项目中,并用logger.info语句替换console.log语句。

使用以下命令安装Pino:

$ npm install pino   

生成的日志是详细的,以JSON格式进行,突出显示日志的行号、日志类型、记录时间等等。Pino在应用程序中记录的开销很小,处理日志时非常灵活。

Pino可以与Hapi、Restify、Express等Web框架集成。由Pino生成的日志也可以存储在文件中。它使用Worker线程进行操作,与TypeScript兼容。

Winston

Winston支持各种Web框架的日志记录,主要关注灵活性和可扩展性。它支持多种传输方式,并可以将日志存储在不同的文件位置。传输是存储日志消息的地方。

除了像Http、Console、File和Stream这样的内置传输之外,它还支持其他传输方式,如Cloud watch和MongoDB。它以各种级别和格式进行日志记录。日志级别表示问题的严重程度。

各种日志级别如下所示:

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

日志输出格式可以定制、过滤和组合。日志包括时间戳、与日志相关联的标签、与上一个日志相隔的毫秒数等信息。

Winston还处理异常和未捕获的Promise。它提供了附加功能,如查询运行时文件、流日志等。首先,必须安装Winston。然后,使用createLogger()函数创建一个Winston配置对象和传输对象,用于存储日志。使用createLogger()函数创建一个logger对象,并将日志消息传递给它。

Node-Bunyan

Bunyan用于在node.js中以JSON格式进行快速日志记录。它还提供了一个CLI(命令行界面)工具以查看日志。它轻巧且支持各种运行时环境,如Node.js、Browserify、WebPack和NW.js。使用漂亮打印函数进一步美化日志的JSON格式。日志有各种级别,如fatal、error、warn、info、debug和trace;每个级别都与一个数值相关联。

所有高于实例设置的级别的日志都会被记录。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

Loglevel用于在Javascript应用程序中进行日志记录。它也是Node.js最好的日志记录器之一,因为它轻量简单。它记录给定级别,并使用一个没有依赖关系的单个文件进行日志记录。默认日志级别是“warn”。日志输出格式良好,包括行号。用于日志记录的一些方法包括trace、debug、warn、error和info。

它在任何环境中都具有容错能力。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("新闻快报:" + message);
    };
};
log.setLevel(log.getLevel()); // 调用setLevel方法以应用插件

使用npm run dist命令运行构建,使用npm test命令运行测试。日志级别支持Webjar、Bower和Atmosphere包。每当添加新功能时,都会发布一个新版本的Loglevel。

Signale

Signale由19个用于Javascript应用程序的记录器组成。它支持TypeScript和作用域日志记录。它包括帮助记录时间戳、数据和文件名的计时器。除了像await、complete、fatal、fav、info等19个记录器外,还可以创建自定义日志。

通过定义一个JSON对象和包含记录器数据的字段来创建自定义日志。也可以创建交互式记录器。当将交互式记录器设置为true时,交互式记录器中的新值将覆盖旧值。

Signale最好的部分是能够过滤掉机密或敏感信息。多个机密信息存储在一个数组中。addSecrets()和clearSecrets()是用于向数组中添加和清除机密信息的函数。Boostnote、Docz、Shower、Taskbook和Vant使用Signale进行日志记录。从Signale调用API的语法如下:

signale.(message[,message]|messageObj|errorObj)

撰写本文时,Signale的下载次数已超过100万次。

Tracer

Tracer用于生成详细的日志消息。日志消息包括时间戳、文件名、行号和方法名。可以安装辅助包来自定义输出日志格式。可以使用以下命令安装辅助包。

 npm install -dev tracer

Tracer支持文件、流和MongoDB传输。它支持带有过滤条件的彩色控制台日志记录。首先,必须使用npm install安装tracer。其次,必须创建一个logger对象,并选择控制台类型。然后,可以在对象上指定各种日志级别或类型,以进行进一步的日志记录。

可以通过定义带有业务逻辑的同步函数来创建自定义过滤器。还可以使用像tinytim这样的微模板进行系统日志记录。

Cabin.js

Cabin用于服务器端和客户端日志记录的node.js应用程序。它用于需要屏蔽敏感和关键信息的地方,包括信用卡号码、BasicAuth头部、盐、密码、CSRF令牌和银行帐号。下面的代码片段显示了使用Cabin.js进行日志记录。

const Cabin = require('cabin');
const cabin = new Cabin();
cabin.info('你好,世界');
cabin.error(new Error('糟糕!'));

它包含超过1600个字段名。它还遵循“自带日志记录器”(BYOL)的原则,这使其与Axe、Pino、Bunyan、Winston等各种其他日志记录器兼容。它通过自动流和Cabin缓冲区减少了磁盘上的存储成本。它具有跨平台兼容性和易于调试。

服务器端日志记录需要使用中间件进行路由和自动输出日志记录。浏览器端日志记录需要XHR请求和脚本。它使用Axe来显示元数据,即关于数据、堆栈跟踪和其他错误的数据。SHOW_STACK和SHOW_META是设置为true或false以显示或隐藏堆栈跟踪和元数据的布尔变量。

Npmlog

Npmlog 是npm使用的一种基本类型的日志记录器。使用的一些日志记录方法包括level、record、maxRecordSize、prefixStyle、heading和stream。它还支持彩色日志记录。各种日志记录级别包括silly、verbose、info、warn、http和error。下面是使用npm日志的示例代码片段。

var log = require('npmlog')

// additional stuff ---------------------------+
// message ----------+                         |
// prefix ----+      |                         |
// level -+   |      |                         |
//        v   v      v                         v
    log.info('fyi', '我有一只小猫猫: %j', myKittyCat)

如果将日志级别指定为“Infinity”,则所有消息都将被抑制。如果将日志级别指定为“-Infinity”,则必须启用查看日志消息的选项才能查看日志。

日志记录使用事件和消息对象。当使用前缀事件时,会发出前缀消息。样式对象用于格式化日志,如为文本和背景添加颜色,字体样式如粗体、斜体、下划线等。一些npm日志包包括brolog、npmlogger、npmdate日志等。

Roarr

Roarr 是用于Node.js的日志记录器,它不需要初始化并生成结构化数据。它具有CLI和环境变量。它与Fastify、Fastify、Elastic Search等集成。它可以区分应用程序代码和依赖代码。每个日志消息由上下文、消息、序列、时间和版本组成。各种日志级别包括trace、debug、info、warn、error和fatal。Roarr中记录日志的示例代码片段如下:

import {
  ROARR,
} from 'roarr';

ROARR.write = (message) => {
  console.log(JSON.parse(message));
};

此外,还可以进行错误的序列化,这意味着可以将带有错误的实例与对象的上下文一起记录。一些特定于Node.js和Roarr的环境变量包括ROARR_LOG和ROARR_STREAM。”adopt”是一个与node.js一起使用的函数,用于将上下文属性传递到各个级别。在日志记录时,中间件也可以使用子函数。

最后的话

日志记录是一种在程序执行过程中跟踪各种活动和事件的方法。日志记录在代码调试中起着重要作用。它还有助于提高代码的可读性。Node.js是一个开源的JavaScript运行时环境。一些最好的Node.js日志记录器包括Pino、Winston、Bunyan、Signale、Tracer、Npmlog等。每种类型的日志记录器都有其自己的特点,如分析、过滤、流式传输和传输。

一些日志记录器支持彩色控制台,而有些适用于处理敏感信息。详细和格式化的日志对于开发人员在修复代码中的错误时最有帮助。JSON格式通常用于日志记录,因为它以键值对的形式记录数据,使其用户友好。

日志记录器还可以与其他应用程序集成,并且与多个浏览器兼容。在选择要使用的日志记录器类型之前,建议先了解您正在构建的需求和应用。

您还可以查看如何在Windows和macOS上 进行日志记录。

类似文章