代码之家  ›  专栏  ›  技术社区  ›  Alessandro

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

  •  6
  • Alessandro  · 技术社区  · 12 年前

    我使用node.js和nodemongodb本机驱动程序以及连接池。有没有任何方法可以启用调试,以查看发生了什么,有多少连接处于活动状态,以及何时打开或关闭连接?

    我想看看这样的东西:

    * connection xxx opened on host:port
    * connection yyy opened on host:port
    * connection xxx closed
    
    3 回复  |  直到 12 年前
        1
  •  4
  •   xamgore    4 年前
    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))
    
        2
  •  1
  •   jmikola    12 年前

    这个 Db() Server() 对象都支持logger选项,该选项是一个具有 log , error debug 功能。这个 数据库() 选项目前似乎没有记录在案,但在 0.9.6-20 2011-10-04 changelog entry

    我不确定这个接口是否支持您需要的所有信息,但它绝对是一个很好的起点。驾驶员团队可能也会欢迎添加此类功能的请求。

        3
  •  1
  •   Mendes    4 年前

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

    import { Logger } from "mongodriver";
    

    稍后在您的代码中:

    Logger.setLevel("debug");
    

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