124

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?

4 Answers 4

262

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.

Sign up to request clarification or add additional context in comments.

1 Comment

how does mongoose format the log. IE I would like to use the second option to let winston log. I like the format mongoose logs and I would format my log w/ winston the same way.
23

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); }); 

2 Comments

Nice. But how to add color to only value like mongoose debug default
you can use chalk npm module to color, whichever values you want to colorize log(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
12

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 }); }); 

1 Comment

I need to log filename and line number from where the query is executed. Is there anyway i can do that?
5

You can also set debug logger parameters:

node index.js DEBUG=mquery 

but this will only log queries, not insert or update statements.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.