log all queries that mongoose fire in the application

前端 未结 4 1974
忘了有多久
忘了有多久 2020-12-04 09:52

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

相关标签:
4条回答
  • 2020-12-04 10:01

    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
        });
    });
    
    0 讨论(0)
  • 2020-12-04 10:12

    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.

    0 讨论(0)
  • 2020-12-04 10:13

    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);
    });
    
    0 讨论(0)
  • 2020-12-04 10:18

    You can also set debug logger parameters:

    node index.js DEBUG=mquery
    

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

    0 讨论(0)
提交回复
热议问题