2023年最受欢迎的4款NodeJS日志库

Node.js 有许多日志库来帮助您创建和管理结构化日志。 在这里,您将探索 Node.js 生态系统中当前可用的顶级日志记录包以及如何使用它们。

2023年最受欢迎的4款NodeJS日志库
日志记录可以成为解决问题和分析应用程序使用情况的宝贵工具。 这些库让开发过程变的更简单。

正确的日志记录是构建和维护功能性 Web 应用程序的一个关键方面。 它可以帮助您跟踪错误、诊断性能问题以及了解用户如何与您的应用交互。

Node.js 有许多日志库来帮助您创建和管理结构化日志。 在这里,您将探索 Node.js 生态系统中当前可用的顶级日志记录包以及如何使用它们。

Winston

Winston 是一个 Node.js 库,提供灵活的日志记录功能,包括多种日志输出方式,支持控制台、文件和网络传输。 这意味着您可以将日志打印到控制台、将它们写入文件或通过网络发送它们。 使用 Winston 的日志记录级别,您可以创建自定义传输并根据严重性过滤日志。

将 Winston 安装为项目目录中的依赖项。 运行此命令:

npm install winston

下面的代码块演示了如何使用 Winston 设置基本的日志记录系统。 您可以为不同的位置和不同的严重程度定义日志。

const winston = require("winston");

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

logger.info('Hello, Winston!');
logger.warn('Warning: Something may be wrong.');
logger.error('An error occurred.');

此代码使用三种输出方式。 第一个是控制台,它将日志消息输出到控制台。 第二个是文件传输,它将“错误”级别的日志写入“error.log”文件。 第三个是文件传输,它将所有日志写入“combined.log”文件。

默认情况下,记录器设置为“info”级别,并包含一个默认元数据对象,其中“service”字段设置为“my-service”。

然后分别在“信息”、“警告”和“错误”级别记录三个消息。 这些消息将根据传输配置输出到控制台和相应的日志文件。

Morgan

Morgan 是 Node.js 的日志记录中间件,提供基本的请求记录功能。 它的设计轻巧且易于使用。 Morgan 的工作原理是拦截 HTTP 请求并记录相关信息,例如请求方法、URL、状态码等。

Morgan 的主要优势之一是其简单性。 您可以使用几行代码将它添加到 Node.js 应用程序,因为它不需要额外的配置来设置。

Morgan 支持多种日志记录格式,包括 common、combined、short、tiny 和 dev 格式,允许您选择最适合您需求的一种。

您可以通过运行以下命令将 Morgan 作为依赖项安装在项目目录中:

npm install morgan

此代码显示如何在 Express 应用程序中使用 Morgan:

const express = require("express");
const morgan = require("morgan");
const app = express();

app.use(morgan("dev"));

app.get("/", (req, res) => {
  res.send("Hello World!");
});

app.listen(3000, () => console.log(`App Started`));

该代码使用 dev 格式初始化 Morgan。 当您向根路由 (/) 发出 GET 请求时,Morgan 会将该请求的详细信息记录到控制台。

尽管它很简单,但 Morgan 是一个功能强大的日志包,它为 Node.js 应用程序提供了基本的请求日志记录功能。

Pino

Pino 是一种流行的轻量级 Node.js 应用程序日志记录包,如其基准测试所述,它具有快速的性能和低开销。

Pino 支持多种传输类型,可以通过自定义传输轻松扩展。 Pino 的主要功能之一是它能够记录 JSON 格式的消息,这使得它们易于解析和分析。

Pino 的使用因 Node.js 框架而异; 您可以通过运行以下命令将 Pino 作为依赖项安装在 Express 项目目录中:

npm install pino-http

对于不同的框架,请查看 Pino 文档

此代码块显示了 Pino 在 Express 应用程序中的用法:

const express = require("express");
const app = express();
const pino = require('pino-http')();

app.use(pino);

app.get("/", (req, res) => {
  pino(req, res); // logs request and response
  req.log.info('root route'); // logs additional info
  res.send("Hello World!");
});

app.listen(3000, () => console.log(`App Started`));

Debug

Debug 是 Node.js 的日志记录包,仿照 Node.js 核心的调试技术。 它提供了一个轻量级的日志记录解决方案,允许您在不修改代码的情况下有选择地启用或禁用日志记录,从而使调试和故障排除变得容易。

Debug 还允许您设置日志命名空间,它根据应用程序中的组件和模块为您的日志提供层次结构,从而更容易过滤和搜索它们。 此外,Debug 提供了各种日志记录级别,例如错误、警告和信息,您可以使用这些级别来确定日志的优先级和过滤它们的日志。

您可以使用以下命令将 Debug 安装为项目目录中的依赖项:

npm install debug

此代码显示了 Debug 在 Express 应用程序中的用法:

const express = require('express');

// Import debug and create namespace
const debug = require('debug')('myapp:server');

const app = express();
const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
  debug('Received request for /');
  res.send('Hello, world!');
});

app.listen(port, () => {
  debug(`Server listening on port ${port}`);
});

该代码创建了一个名称空间 myapp:server。 此命名空间会将与您的“服务器”模块相关的日志与应用程序中具有不同命名空间的其他模块相关的日志区分开来。

运行此命令以启动调试:

DEBUG=myapp:* node server.js

上面的命令将匹配任何具有以 myapp: 开头的命名空间的日志消息。 如果只想查看与服务器模块相关的日志,可以将 DEBUG 环境变量设置为 myapp:server。

Debug 的另一个优点是它与其他日志记录包(例如 Winston)的兼容性。

选择日志记录包

选择日志记录包是一个重要的决定,它会显着影响调试过程的效率和有效性。 必须考虑包的特性和功能、它与您的编程语言和开发环境的兼容性以及它的易用性和配置等因素。最终,日志包的选择将取决于您项目的具体需要和要求。