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

时间:2012-10-02 14:31:55

标签: node.js mongodb logging node-mongodb-native

我使用node.js和node-mongodb-native驱动程序,连接池。有没有办法启用调试,看看发生了什么,有多少连接是活动的,什么时候打开或关闭连接?

我希望看到类似的内容:

* connection xxx opened on host:port
* connection yyy opened on host:port
* connection xxx closed

3 个答案:

答案 0 :(得分:1)

Db()Server()对象都支持记录器选项,该选项是具有logerrordebug功能的对象。 Db()选项目前似乎没有记录,但0.9.6-20 2011-10-04 changelog entry中提到了它。

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

答案 1 :(得分:1)

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

import { Logger } from "mongodriver";

然后在您的代码中:

Logger.setLevel("debug");

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

答案 2 :(得分:1)

  1. 要观看已发送到MongoDB的命令,请将driver logger's级别设置为debug
  2. 要对connection pool events做出反应,只需订阅它们并自己登录即可。
  3. 您可能需要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))