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.
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);
});
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.
Install winston
and winston-mongodb
$ npm install winston winston-mongodb
const winston = require("winston");
const { MongoDB } = require("winston-mongodb");
// To save the logs in database
const logger = winston.createLogger({
level: "info",
// format: winston.format.json(),
transports: [
new MongoDB({
db: process.env.MONGO_URL,
options: {
useUnifiedTopology: true,
useNewUrlParser: true,
},
}),
],
});
Use logger.info()
method to save the logs in mongodb
//Example
var data = "string";
logger.info(data);