log all queries that mongoose fire in the applicat

2019-01-21 04:55发布

问题:

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?

回答1:

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.



回答2:

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


回答3:

You can also set debug logger parameters:

node index.js DEBUG=mquery

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



回答4:

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