I have application using nodejs and mongodb. I have used mongoose for ODM. Now i want to log all the queries that mongoose fire during the whole application.
How to log these?
I have application using nodejs and mongodb. I have used mongoose for ODM. Now i want to log all the queries that mongoose fire during the whole application.
How to log these?
You can enable debug mode like so:
mongoose.set('debug', true);
or add your own debug callback:
mongoose.set('debug', function (coll, method, query, doc [, options]) {
//do your thing
});
This will log all executed collection methods and their arguments to the console.
I'm using node bunyan, this is an option to debug and track queries(may help someone else)
function serializer(data) {
let query = JSON.stringify(data.query);
let options = JSON.stringify(data.options || {});
return `db.${data.coll}.${data.method}(${query}, ${options});`;
}
let log = bunyan.createLogger({
name: 'AppName',
src: false,
serializers: {
// ...
dbQuery: querySerializer
// ...
},
// ...
});
mongoose.set('debug', function(coll, method, query, doc, options) {
let set = {
coll: coll,
method: method,
query: query,
doc: doc,
options: options
};
log.info({
dbQuery: set
});
});
You can also set debug logger parameters:
node index.js DEBUG=mquery
but this will only log queries, not insert or update statements.
You can use the following format:
mongoose.set("debug", (collectionName, method, query, doc) => {
console.log(`${collectionName}.${method}`, JSON.stringify(query), doc);
});
or any other logger of your choice:
mongoose.set("debug", (collectionName, method, query, doc) => {
logger(`${collectionName}.${method}`, JSON.stringify(query), doc);
});