本博客将讨论使用日志库的价值,并列出我们为 Node.js 遇到的 10 个最受好评的日志工具。在@playerzero,我们经常使用 node.js 日志库来创建和管理日志事件。详细了解我们如何使用我们独特的方法来监控当今对前端和后端应用程序至关重要的内容 https://www.playerzero.app/
皮诺
温斯顿
本扬
摩根
日志级别
Log4js
Npm日志
咆哮
示踪剂
信号
从高层次的角度来看,Node.js 日志记录很重要,因为它可以帮助开发人员跟踪应用程序的事件和性能、诊断和修复问题、监控系统行为并做出明智的决策。日志记录提供应用程序活动的记录,允许开发人员识别和调试问题,了解用户行为,并提高系统的整体性能和稳定性。日志记录在生产环境中也很有用,可用于检测和修复错误、监控系统性能以及检测安全事件。
每当应用程序出现严重错误时,开发人员都可以选择通过堆栈跟踪来追踪其来源。但是……仅仅依靠堆栈跟踪只能描绘出一半的画面。跟踪将为您提供有关应用程序执行的信息,包括请求流、数据库查询、外部 API 调用和性能指标 - 这可能非常有用。通常,跟踪用于在粒度级别上了解应用程序的行为并识别性能瓶颈。
日志记录填充了图片的另一半。日志记录是记录与应用程序相关的消息和事件的过程,例如错误、警告、性能指标和调试信息。 Node.js 中的日志记录用于诊断问题、了解用户行为以及提高应用程序的整体性能和稳定性。它还提供应用程序中活动的记录,使开发人员能够识别和调试问题并做出更明智的决策。
您应该使用 Node.js 日志记录库的原因有几个:
日志记录级别是一种对日志消息的重要性或严重性进行分类的方法。通常,有几个级别,从严重错误到信息性消息,每个级别都与一个数值相关联,该数值可用于过滤库中的日志消息。以下是最常见的级别:
FATAL
日志级别
或许不出所料, FATAL
日志级别是指示应用程序中出现严重错误的严重级别 - 这意味着具有FATAL
级别的日志表明在没有开发人员干预的情况下应用程序无法继续正常运行。
ERROR
日志级别
ERROR
日志级别表示应用程序当前能够运行,但是遇到了问题。通常,这表明应用程序中的一项必需任务失败了——出现异常、意外行为或输入不正确。
WARN
日志级别
WARN
是一个没有ERROR
严重的日志级别,但是,不应该被忽略。 WARN
日志可用于主动识别问题并防止问题变得更严重,因为它们表明您的应用程序中的某些内容可能会成为更严重问题的催化剂。
INFO
日志级别
INFO
日志级别是日志系统中使用的一种日志消息,用于指示一般的信息性消息。它通常用于记录应用程序或系统中例行的、预期的事件,例如进程的启动、任务的完成或系统状态的更改。通常可以忽略这些警报,因为它们旨在确认应用程序是否正常工作。
DEBUG
日志级别
通常, DEBUG
日志级别提供仅在调试过程中有用的信息。 DEBUG
日志是最详细的日志消息类型,提供应用程序内部工作的精细视图。 DEBUG
日志的主要目的是帮助开发人员了解系统正在做什么、识别错误和问题以及诊断问题。
Pino 是一个历史悠久且非常流行的日志记录工具,在 Github 上拥有超过 10.9K 颗星,在 npm 上有数百万次下载。 Pino 是一个流行的 Node.js 日志记录库,因为它提供了几个关键特性,使其非常适合在 Node.js 应用程序中使用:
快速- Pino 的设计目标是快速和轻便,并专注于性能。它对日志消息使用二进制格式,这使其能够快速高效地生成日志输出。
结构化日志——Pino 以 JSON 格式记录消息,这样可以轻松解析、过滤和分析日志数据。这使得搜索、可视化和分析日志数据以及将日志数据集成到其他系统变得更加容易。
易于扩展——Pino 被设计成高度可扩展的,并包含许多可用于添加附加功能的内置插件,例如将日志数据写入文件或将日志数据发送到远程服务器。
低开销——Pino 是一个高效的 Node.js 日志库,因为它的资源利用率最低。 Pino 的日志记录过程逐渐积累消息,导致应用程序节流和每秒请求数减少。节流是一种技术,其中触发连接到事件的函数在指定时间范围内仅运行一次,即使事件被触发多次也是如此。
传输- Pino 提供了多种发送日志的选项,包括写入文件、在控制台中显示以及利用 Sentry、Azure Application Insights 和 CouchDB 等平台。
要在 Node.js 应用程序中使用 Pino,请执行以下步骤:
要安装 Pino,只需在新目录中运行以下命令即可安装它:
npm install pino
导入- 在您的 Node.js 应用程序中,通过在文件顶部添加以下代码行来导入 Pino:
const pino = require('pino');
初始化——通过创建记录器实例来初始化 Pino,例如:
const logger = pino({ level: 'info' });
此脚本在控制台上生成日志记录级别为INFO
及以上的日志。
通过将级别设置为信息,Pino 将记录日志级别为INFO
、 WARN
、 ERROR
和FATAL
的消息。日志记录级别低于INFO
的消息(例如DEBUG
)将不会被记录。
此代码仅创建一个日志级别设置为 INFO 的 Pino 记录器实例。在您使用记录器实例记录内容之前,不会生成或显示任何日志消息。例如:
logger.info('This is an info message');
这将在控制台上产生以下输出:
{"level":30,"time":1624825088703,"msg":"This is an info message","pid":1234,"hostname":"my-machine"}
控制台上显示的记录数据包括日志级别、记录时的时间戳、记录的消息、日志的标识符和主机名。
日志记录- 您也可以使用logger
实例在您的应用程序中记录其他消息。例如:
logger.warn('This is a warning message'); logger.error('This is an error message');
输出- 默认情况下,Pino 记录到控制台。如果您想要更改输出,您可以使用我们之前提到的 Pino 的可用传输之一,例如写入文件、将日志发送到远程服务(如 Sentry)或使用 Azure Application Insights。更多信息,您可以参考 Pino 的“Known Transports”部分。
Pino 的pino-pretty
基本 NDJSON 格式化程序功能是用于 Pino 日志的非常简单的格式化程序,并且易于设置。以下是启动和运行它的方法:
第 1 步- 通过在终端中运行以下命令,将 pino-pretty 作为依赖项安装在 Node.js 项目中:
npm install pino-pretty
第 2 步- 通过在文件顶部添加以下代码行,在 Node.js 应用程序中导入pino-pretty
:
const pino = require('pino'); const pinoPretty = require('pino-pretty'); const logger = pino({ level: 'info' }); logger.pipe(pinoPretty());
通过这两个代码片段,您已经安装了pino-pretty
并将其设置为格式化您的 Pino 日志。现在您可以使用记录器实例在您的应用程序中记录消息,并且日志将以漂亮的、人类可读的格式显示在控制台上。
在@RisingStack提供的如何使用最佳工具调试 Node.js中了解更多关于使用 Pino 进行调试的信息
Winston 在 GitHub 上拥有超过 2 万颗星,是一个非常流行的 Node.js 日志记录库。由于其全面的功能集和易用性,Winston 是 Node.js 生态系统中独一无二的日志记录库。温斯顿脱颖而出的一些原因是:
要在您的 Node.js 项目中安装 Winston,您可以通过在终端中运行以下命令来使用 npm 包管理器:
npm install winston
安装完成后,您可以通过包含以下行在 Node.js 代码中导入和使用 Winston:
const winston = require('winston');
然后,您可以使用 Winston 库来配置和创建您的日志记录实例,例如:
const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.Console() ] });
这将创建一个具有信息级别和控制台传输的记录器实例。您可以使用此记录器实例在您的应用程序中记录消息,例如:
logger.info('Hello World');
这将使用 info 日志级别将消息Hello World
记录到控制台。
Winston 配备了六个默认日志记录级别,按照 RFC5424 文档中概述的指南进行安排。这些级别被指定为数字优先级,最高严重性被指定为最低数字。六个级别及其各自的优先级值是:
{ error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6 }
对于六个日志级别中的每一个,在 logger 对象上都有相应的方法:
logger.error('error'); logger.warn('warn'); logger.info('info'); logger.verbose('verbose'); logger.debug('debug'); logger.silly('silly');
您还可以将表示日志记录级别的字符串传递给 log() 方法:
logger.log('error', 'error message'); logger.log('info', 'info message');
logger
的level
属性指示哪些日志消息将传递到您配置的传输。例如,如果level
属性设置为info
,则只会写入严重程度为info
或更高的日志条目,而所有其他条目将被取消优先级。这意味着在当前配置中,只会输出级别为info
、 warn
和error
的日志消息。
Bunyan 是一个独特的 Node.js 日志库,因为它专注于使日志数据更加结构化和可读(他们通过将日志序列化为 JSON 对象而不是纯文本来实现这一点)。这就是 Bunyan 在 Github 上拥有 7k 星的原因:
要安装 Bunyan,您可以在终端或命令提示符中运行以下命令:
npm install bunyan
这将在您的 Node.js 项目中安装 Bunyan 库及其依赖项。安装后,您可以在代码中要求该库并开始使用它。
在您的项目中导入 Bunyan - 在 JavaScript 文件的顶部,添加以下行:
const bunyan = require('bunyan');
创建记录器实例- 接下来,使用以下代码创建记录器实例:
const logger = bunyan.createLogger({ name: 'my-app-name', level: 'info' });
在此示例中, name
是您的应用程序的名称,level 指定您要查看的日志的最低级别。
记录消息——要记录消息,只需调用 Bunyan 的日志方法之一,例如 info、warn 或 error,然后传入您要记录的消息,如下所示:
logger.info('This is an info log message'); logger.warn('This is a warn log message'); logger.error('This is an error log message');
运行您的代码- 最后,运行您的代码,您应该会在控制台中看到记录的消息。
Bunyan默认以JSON格式输出日志,方便使用日志管理工具解析分析日志。您还可以使用 Bunyan 的流选项自定义格式。
出于多种原因,Morgan 是 Node.js 的独特日志库,主要是其作为中间件的独特定位。除其他原因外,它还非常受欢迎,在我们撰写本文时,GitHub 上有 7300 颗星。以下是摩根如此受欢迎的几个原因:
首先使用 npm 安装 morgan 包:
npm install morgan
完成安装过程后,您需要使用“require”函数导入库,然后将其作为中间件集成到您的 Express.js 应用程序中。
代码如下所示:
var morgan = require('morgan'); app.use(morgan('dev'));
“dev”参数是 Morgan 提供的格式选项。 Morgan 提供五种不同的日志记录格式,包括:
tiny
的输出很小。short
包括响应时间并默认缩写日志。dev
提供简洁的颜色编码输出,供开发期间使用common
还使用 Apache 组合日志输出。combined
使用标准化的 Apache 组合日志输出。
在将 Morgan 集成到您的应用程序中时,您可以通过使用适当的参数在这些格式之间进行选择,如下所示:
app.use(morgan('combined')); app.use(morgan('common')); app.use(morgan('dev')); app.use(morgan('short')); app.use(morgan('tiny'));
Loglevel 不如这里列出的其他一些选项受欢迎,在 Github 上有 2.4K 星,但它仍然是一个很棒的轻量级日志库。以下是 loglevel 是 Node.js 独特的日志记录库的几个原因:
要设置日志级别,您需要先使用 npm 安装它:
npm install loglevel
安装后,您可以将其导入 Node.js 项目并通过设置日志级别开始使用它:
const log = require('loglevel'); log.setLevel(log.levels.ERROR);
通过将日志级别设置为ERROR,
您指定仅记录严重级别为ERROR
的日志消息。设置日志级别后,您可以使用以下方法记录不同级别的消息:
log.trace('This is a trace message'); log.debug('This is a debug message'); log.info('This is an info message'); log.warn('This is a warning message'); log.error('This is an error message');
您设置的日志级别将决定哪些消息将被记录,哪些将被忽略。例如,如果日志级别设置为 info,则只会显示使用log.info和 log.warn 或 log.error 记录的消息。
当然,我们不能在不列出它的老大哥 Log4js 的情况下提及 loglevel。 Log4js 是一个 JavaScript 日志记录库,最初是作为流行的 Java 日志记录库 Log4j 的端口。它的创建是为了为 JavaScript 应用程序提供类似的日志记录解决方案,并且后来发展为提供高级日志记录功能和特性。 Github 上有超过 5600 颗星,以下是 Log4js 如此受欢迎的一些原因:
要安装 Log4js,您可以通过在终端中运行以下命令来使用 npm 包管理器:
npm install log4js
这将安装最新版本的 Log4js 及其依赖项。然后,您可以在 Node.js 应用程序中需要该库并开始使用它来记录消息。
要开始使用 Log4js,首先在您的代码中要求它并配置它:
const log4js = require('log4js'); log4js.configure({ appenders: { console: { type: 'console' } }, categories: { default: { appenders: ['console'], level: 'info' } } }); const logger = log4js.getLogger();
然后,您可以使用记录器记录不同级别的消息:
logger.trace('Entering cheese testing'); logger.debug('Got cheese.'); logger.info('Cheese is Gouda.'); logger.warn('Cheese is quite smelly.'); logger.error('Cheese is too ripe!'); logger.fatal('Cheese was breeding ground for listeria.');
下面是使用 Log4js 将消息记录到具有不同日志级别的多个附加程序(控制台和文件)的示例:
const log4js = require('log4js'); log4js.configure({ appenders: { console: { type: 'console' }, file: { type: 'file', filename: 'app.log' } }, categories: { default: { appenders: ['console'], level: 'info' }, file: { appenders: ['file'], level: 'error' } } }); const logger = log4js.getLogger(); const fileLogger = log4js.getLogger('file'); logger.info('This is an informational message'); fileLogger.error('This is an error message');
在此示例中,类别为“default”的记录器被配置为将级别为 info 或更高级别的消息记录到控制台。类别为“文件”的记录器被配置为将错误级别或更高级别的消息记录到文件中。这两个记录器可以互换使用,将消息记录到它们各自的附加程序中。
npmlog 的独特价值在于其简单性和最小开销,使其非常适合在小规模或对性能敏感的项目中使用。它易于配置并与 npm 生态系统无缝集成(这并不奇怪,因为它是 npm 的官方记录器实用程序),使其成为寻求轻量级日志记录解决方案的开发人员的热门选择。以下是 npmlog 上榜的几个原因:
要安装 npmlog,您需要在计算机上安装 Node.js 和 npm(节点包管理器)。然后,您可以在终端或命令提示符中运行以下命令:
npm install npmlog
这将下载并安装最新版本的 npmlog 及其依赖项,允许您在 Node.js 项目中使用它。
以下是如何在 Node.js 项目中使用 npmlog 的示例:
const log = require('npmlog'); log.level = 'verbose'; log.verbose('This is a verbose message'); log.info('This is an informational message'); log.warn('This is a warning'); log.error('This is an error');
在此示例中,我们首先需要npmlog
模块并将其分配给一个变量。然后,我们将日志级别设置为verbose
,这意味着将显示日志级别为verbose
、 info
、 warn
和error
的消息。然后,我们使用verbose
、 info
、 warn
和error
方法记录不同级别的消息。
请注意,默认情况下,npmlog 写入process.stderr
。如果需要写入process.stdout
,可以使用log.stream
属性。
roarr 库是一个 Node.js 日志记录工具,旨在无需初始化即可生成结构化数据。它具有命令行界面 (CLI) 并支持环境变量,使其用途广泛且易于使用。此外,roarr 与 Node.js 和浏览器环境兼容,使其成为适用于各种应用程序的多功能日志记录解决方案。
以下是突出 roarr 库独特价值的几个要点:
首先,使用 npm 安装 roarr:
npm install roarr
接下来,将 roarr 导入您的代码并创建一个记录器:
const Roarr = require('roarr').default; const logger = new Roarr({ context: { service: 'my-service' } });
使用log
方法记录消息:
logger.info('Hello, world!');
默认情况下,roarr 日志将输出到控制台。您可以通过使用stream
选项指定不同的流(例如文件)来自定义日志输出:
const Roarr = require('roarr').default; const fs = require('fs'); const logger = new Roarr({ context: { service: 'my-service' }, stream: fs.createWriteStream('./my-service.log') });
这只是如何使用 roarr 的一个基本示例。还有更多选项和功能可用,因此请务必参考官方 roarr 文档以获取更多信息。
Tracer 是一个用于 Node.js 应用程序的开源日志记录库,由 Node.js 社区开发。它旨在提供一种高效灵活的方式来记录 Node.js 应用程序中的消息和调试信息。 Tracer 由一组志愿者积极维护和开发,任何人都可以在 Github 上使用和贡献。以下是使其成为独特日志库的一些功能:
可以使用节点包管理器 (npm) 安装 Tracer。以下是安装 Tracer 的步骤:
npm install tracer
这会将 Tracer 作为项目的依赖项安装。然后您可以在您的代码中要求它并开始使用它来记录消息。
以下是如何在代码中使用 Tracer 的示例:
const tracer = require('tracer'); const logger = tracer.console(); logger.info('Starting the application...');
在这个例子中,我们首先需要 Tracer 库,然后使用tracer.console()
方法创建一个控制台记录器。最后,我们使用 logger 对象的info
方法记录一条信息性消息。
下面是另一个使用 Tracer 的例子:
const tracer = require('tracer'); const logger = tracer.dailyfile({root: './logs', maxLogFiles: 10}); logger.error('An error has occurred:', new Error('Something went wrong'));
在此示例中,我们使用tracer.dailyfile
方法创建一个文件记录器,将日志写入每日轮换文件。 root
选项指定将存储日志文件的目录,而maxLogFiles
选项限制将保留的日志文件的数量。
最后,我们使用 logger 对象上的error
方法记录一条错误消息,以及一个错误对象,提供有关已发生错误的更多信息。
它的 Github 页面以“可破解和可配置到核心”而自豪,这是使 Signale 成为 Node.js 社区中深受喜爱的日志库的主要部分。该库的创建是为了解决开发人员在尝试在 Node.js 应用程序中记录消息时所面临的困难,例如杂乱无章且难以阅读的日志。这是让它脱颖而出的原因:
要安装 Signale,您可以通过在终端中运行以下命令来使用 Node.js 包管理器 npm:
npm install signale
或者,您也可以通过在终端中运行以下命令来使用 yarn 安装 Signale:
yarn add signale
安装后,您可以将 Signale 导入 Node.js 应用程序并开始使用它来记录消息和调试信息。
下面是将 Signale 导入 Node.js 应用程序并使用它来记录消息的示例:
const signale = require('signale'); // Log an info message signale.info('Starting up the server'); // Log a success message signale.success('Server started successfully'); // Log a warning message signale.warn('Low memory warning'); // Log an error message signale.error(new Error('An error occurred while processing data'));
在此示例中,我们使用require
函数将 Signale 导入到我们的 Node.js 应用程序中。然后,我们使用 Signale 提供的各种日志记录方法,例如info
、 success
、 warn
和error
,来记录不同类型的消息。这些方法中的每一种都有独特的符号和颜色,可以轻松快速地识别日志消息的类型。
您可以在Signale 文档中找到有关如何使用 Signale 的更多信息,包括其他日志记录方法和自定义选项。
正在寻找一种快速有效的方法来调试您的 Node.js 应用程序?查看本文中提到的一个或多个库,每个库都是不错的选择。然而,Pino 是我们选择的个人日志库,它的价值在于 😉
在测试/开发环境和生产环境中调试 Node.js 应用程序时,这些日志记录库已被证明是至关重要的。
此外,通过将它们与 PlayerZero 等监控解决方案集成,您可以更深入地了解 Node.js 应用程序的性能。
立即预订演示以了解有关 PlayerZero 如何帮助您优化后端应用程序性能的更多信息!
也发布在这里。