6

i use node.js and node-mongodb-native driver, with connection pooling. is there any way to enable debug for see what's happening, how many connections are active and when a connection is opened or closed?

i would like to see something like:

* connection xxx opened on host:port
* connection yyy opened on host:port
* connection xxx closed
Alessandro
  • 303
  • 4
  • 12

3 Answers3

4
  1. To watch the commands been sent to MongoDB, set the driver logger's level to debug.
  2. To react to connection pool events, just subscribe to them and log yourself.
  3. You may need the topology monitoring to react to changes of topology, such as joins to a secondary or disconnections with a replica set.
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))
xamgore
  • 1,723
  • 1
  • 15
  • 30
1

The Db() and Server() objects both support a logger option, which is an object with log, error and debug functions. The Db() option doesn't appear to be documented at the moment, but it is mentioned in the 0.9.6-20 2011-10-04 changelog entry.

I'm not sure if all of the information you need is supported with this interface, but it's definitely a good place to start. The driver team would also probably welcome a pull request to add such features.

jmikola
  • 6,892
  • 1
  • 31
  • 61
  • 1
    thank you, i modified connection.js to log connections and pulled a request on github – Alessandro Oct 03 '12 at 22:17
  • How did you get this working? I passed on an object supporting those methods that should log to the console but I'm not seeing didly squat. – fthinker Aug 19 '13 at 21:03
  • 1
    If it helps, the pull request was: https://github.com/mongodb/node-mongodb-native/pull/765 – jmikola Aug 20 '13 at 15:16
1

You can use the node's driver Logger class:

import { Logger } from "mongodriver";

And later in your code:

Logger.setLevel("debug");

You can check documentation on the official driver API doc

Mendes
  • 17,489
  • 35
  • 150
  • 263