Docs 菜单
Docs 主页
/ / /
Node.js 驱动程序
/

日志记录

在此页面上

  • Overview
  • 配置
  • 环境变量
  • 客户端选项
  • 更多信息
  • API 文档

在本指南中,您可以学习;了解如何在 Node.js驾驶员中配置记录器。驾驶员允许您日志按以下严重性级别分类的信息:

  • emergency

  • alert

  • critical

  • error

  • warn

  • notice

  • info

  • debug

  • trace

  • off

前面的列表按严重性级别降序排列。指定严重性级别还会记录具有更高严重性级别的所有消息。示例,将日志级别设置为 critical 也会导致严重性级别为 emergencyalert 的日志消息。

指定的严重性级别越低,驾驶员记录的信息就越多,这可能会影响应用程序的性能。

您可以通过指定环境变量在 Node.js驾驶员中配置日志记录,而无需更改代码。您还可以通过在 MongoClient 构造函数中指定客户端选项,以编程方式配置日志记录。

注意

由于连接字符串通常在可能具有不同日志记录支持的不同应用部署之间共享,因此我们不建议使用连接字符串来配置日志记录。

您可以通过在以下一个或多个环境变量中指定严重性级别,为驾驶员的不同组件配置日志记录:

  • MONGODB_LOG_ALL:为任何未设置的组件默认默认严重性

  • MONGODB_LOG_COMMAND:记录发送到服务器的所有命令

  • MONGODB_LOG_TOPOLOGY:记录对集群拓扑结构的任何更改

  • MONGODB_LOG_SERVER_SELECTION:记录服务器选择进程

  • MONGODB_LOG_CONNECTION:记录所有连接池事件

  • MONGODB_LOG_CLIENT:记录所有客户端事件

如果未指定上述任何环境变量,驾驶员将使用 MONGODB_LOG_ALL 的值;如果未指定该值,则会隐式设立为 off

提示

由于向服务器发送命令的频率很高,因此命令级别的日志记录是对性能影响最大的日志记录选项。仅在调试应用程序必要时才指定此选项。

以下示例将除 MONGODB_LOG_COMMAND 之外的所有组件的日志级别设置为 debug

export MONGODB_LOG_ALL="debug"
export MONGODB_LOG_COMMAND="off"

您可以通过将 MONGODB_LOG_PATH 环境变量设置为 "stderr""stdout" 来指定驾驶员是记录到 stderr 还是 stdout,如以下示例所示:

export MONGODB_LOG_PATH="stderr"

默认下,驾驶员会记录到 stderr

驾驶员使用EJSON对记录的文档进行字符串化,默认默认下将字符串限制为 1000 个字符。您可以通过指定 MONGODB_LOG_MAX_DOCUMENT 环境变量来指定记录器的最大文档长度。将此变量设置为 0 以不执行截断。

以下示例将最大文档长度设置为 500 个字符:

export MONGODB_LOG_MAX_DOCUMENT_LENGTH=500

您可以通过在 MongoClient 构造函数中指定客户端选项,以编程方式配置日志记录。由于客户端选项优先于环境变量,因此仅当您不再希望驾驶员响应环境变量时才在客户端中指定客户端选项。

提示

如果您的应用程序依赖于 stdoutstderr 的格式,我们建议您使用客户端选项配置日志记录,以避免与应用程序用户的环境变量发生冲突。

您可以通过指定以下一个或多个客户端选项来指定为哪个组件配置日志记录:

  • default:为任何未设置的组件默认默认严重性

  • command:记录发送到服务器的所有命令

  • topology:记录对集群拓扑结构的任何更改

  • serverSelection:记录服务器选择进程

  • connection:记录所有连接池事件

  • client:记录所有客户端事件

要指定组件的日志级别,请将 mongodbLogComponentSeverities 选项设立为包含该组件和所需严重性级别的对象。以下示例将除 command 之外的所有组件的日志级别设置为 debug

const client = new MongoClient("<connection string>", {
mongodbLogComponentSeverities: {
default: "debug",
command: "off"
}
});

您可以通过将 mongodbLogPath 选项设置为 "stderr""stdout" 来指定驾驶员是记录到 stderr 还是 stdout,如以下示例所示:

const mongodbLogComponentSeverities = {
default: "debug"
};
const mongodbLogPath = "stdout";
const client = new MongoClient("<connection string>",
{ mongodbLogComponentSeverities, mongodbLogPath }
);

默认下,驾驶员会记录到 stderr

您还可以指定自定义日志目标。以下示例创建自定义日志目标:

import fs from 'node:fs/promises';
import util from 'node:util';
const mongodbLogPath = {
file: await fs.open(`./server-${+new Date()}.logs`, 'w'),
async write(log) {
try {
await this.file?.appendFile(util.inspect(log) + '\n');
} catch (fileError) {
console.log('cannot log anymore', fileError);
this.file = null;
}
}
}
const client = new MongoClient("<connection string>", { mongodbLogPath });

如果函数在写入操作中抛出错误,则抛出的错误会结束记录器。因此,我们建议您通过将写入函数设置为无操作处理错误,而不是抛出错误,如前面的示例所示。

注意

如果没有适当的日志轮换系统,日志记录可能会耗尽磁盘空间。我们建议您将自定义写入函数连接到常用的日志记录库。

驾驶员使用EJSON对记录的文档进行字符串化,默认默认下将字符串限制为 1000 个字符。您可以通过指定 mongodbLogMaxDocumentLength 选项来指定记录器的最大文档长度。将此选项设置为 0 以不执行截断。

以下示例将最大文档长度设置为 500 个字符:

const mongodbLogComponentSeverities = {
default: "debug"
};
const mongodbLogLength = 500;
const client = new MongoClient("<connection string>", {
mongodbLogComponentSeverities,
mongodbLogLength
});

有关使用 Node.js驾驶员监控的更多信息,请参阅以下监控指南:

  • 命令监控

  • 集群监控

  • 连接监控/池化(Pooling)

要学习;了解有关本指南中讨论的任何选项或类型的更多信息,请参阅以下API文档:

  • MongoClientOptions

  • mongodbLogComponentSeverities

  • mongodbLogMaxDocumentLength

  • mongodbLogPath

后退

排序规则(Collations)