如何在 node.js 和 mongoDB 本机驱动程序上启用调试?

Posted

技术标签:

【中文标题】如何在 node.js 和 mongoDB 本机驱动程序上启用调试?【英文标题】:how to enable debug on node.js and mongoDB native driver? 【发布时间】:2012-09-23 10:15:37 【问题描述】:

我使用带有连接池的 node.js 和 node-mongodb-native 驱动程序。有没有办法启用调试以查看发生了什么、有多少连接处于活动状态以及连接何时打开或关闭?

我想看到类似的东西:

* 连接 xxx 在主机上打开:端口 * 连接 yyy 在主机上打开:端口 * 连接 xxx 关闭

【问题讨论】:

【参考方案1】:

Db()Server() 对象都支持记录器选项,这是一个具有 logerrordebug 函数的对象。 Db() 选项目前似乎没有记录,但在 0.9.6-20 2011-10-04 changelog entry 中提到。

我不确定此界面是否支持您需要的所有信息,但这绝对是一个不错的起点。驱动程序团队也可能会欢迎添加此类功能的拉取请求。

【讨论】:

谢谢,我修改了connection.js来记录连接并在github上拉了一个请求 你是如何做到这一点的?我传递了一个对象,该对象支持那些应该登录到控制台的方法,但我没有看到蹲着。 如果有帮助,拉取请求是:github.com/mongodb/node-mongodb-native/pull/765【参考方案2】:

可以使用节点的驱动Logger类:

import  Logger  from "mongodriver";

稍后在您的代码中:

Logger.setLevel("debug");

您可以在the official driver API doc 上查看文档

【讨论】:

【参考方案3】:
    要查看发送到 MongoDB 的命令,请将 driver logger's 级别设置为 debug。 要对connection pool events 做出反应,只需订阅它们并自己登录即可。 您可能需要topology monitoring 对拓扑变化做出反应,例如加入辅助节点或与副本集断开连接。
const client = new MongoClient('mongodb://127.0.0.1:27017/', 
  useUnifiedTopology: true,
  loggerLevel: 'debug',
  // logger: (message, context) => console.dir(context),
)

// connection pool monitoring
client.on('connectionPoolCreated', event => console.dir(event))
client.on('connectionPoolClosed', event => console.dir(event))
client.on('connectionCreated', event => console.dir(event))
client.on('connectionReady', event => console.dir(event))
client.on('connectionClosed', event => console.dir(event))
client.on('connectionCheckOutStarted', event => console.dir(event))
client.on('connectionCheckOutFailed', event => console.dir(event))
client.on('connectionCheckedOut', event => console.dir(event))
client.on('connectionCheckedIn', event => console.dir(event))
client.on('connectionPoolCleared', event => console.dir(event))

// topology monitoring
client.on('serverDescriptionChanged', event => console.dir(event))
client.on('serverHeartbeatStarted', event => console.dir(event))
client.on('serverHeartbeatSucceeded', event => console.dir(event))
client.on('serverHeartbeatFailed', event => console.dir(event))
client.on('serverOpening', event => console.dir(event))
client.on('serverClosed', event => console.dir(event))
client.on('topologyOpening', event => console.dir(event))
client.on('topologyClosed', event => console.dir(event))
client.on('topologyDescriptionChanged', event => console.dir(event))

【讨论】:

以上是关于如何在 node.js 和 mongoDB 本机驱动程序上启用调试?的主要内容,如果未能解决你的问题,请参考以下文章

Node.js mongodb 驱动程序异步/等待查询

如何在 node.js 中重用 mongodb 连接

如何在 node.js 和 mongodb 中实现 geoip

本机 node.js:如何包含 css? [关闭]

如何在 Node.js 中从 MongoDB 返回 JSON?

如何使用node.js中的循环将表单数据保存为对象和对象数组到mongodb?