mongodb 记录Mongoose在应用程序中触发所有查询

ff29svar  于 2023-03-22  发布在  Go
关注(0)|答案(5)|浏览(181)

我有一个使用nodejs和mongodb的应用程序。我已经使用mongoose进行ODM。现在我想记录mongoose在整个应用程序中发出的所有查询。
如何记录这些?

bihw5rsg

bihw5rsg1#

您可以按如下方式启用调试模式:

mongoose.set('debug', true);

或添加您自己的调试回调:

mongoose.set('debug', function (coll, method, query, doc [, options]) {
 //do your thing
});

这将把所有执行的收集方法及其参数记录到控制台。

fcwjkofz

fcwjkofz2#

可以使用以下格式:

mongoose.set("debug", (collectionName, method, query, doc) => {
    console.log(`${collectionName}.${method}`, JSON.stringify(query), doc);
});

或您选择的任何其他记录器:

mongoose.set("debug", (collectionName, method, query, doc) => {
    logger(`${collectionName}.${method}`, JSON.stringify(query), doc);
});
c3frrgcw

c3frrgcw3#

我使用的是Node bunyan,这是一个调试和跟踪查询的选项(可能对其他人有帮助)

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

pxiryf3j4#

您还可以设置调试记录器参数:

node index.js DEBUG=mquery

但这将只记录 * 查询 *,而不记录插入或更新语句。

y3bcpkx1

y3bcpkx15#

// $ npm i winston
// $ npm i 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() to save the logs in mongodb
// var data = "string"
// example:- logger.info(data)

相关问题