记录猫鼬在应用程序中触发的所有查询


86

我有使用nodejs和mongodb的应用程序。我用猫鼬做ODM。现在,我想记录整个应用程序中猫鼬触发的所有查询。

如何记录这些?

Answers:


197

您可以像这样启用调试模式:

mongoose.set('debug', true);

或添加自己的调试回调:

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

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


3
猫鼬如何格式化日志。IE浏览器,我想使用第二个选项让Winston登录。我喜欢格式化猫鼬​​日志,我会以相同的方式格式化带有Winston的日志。
lostintranslation 2014年

12

我正在使用节点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
    });
});

我需要从执行查询的地方记录文件名和行号。反正我能做到吗?
Shruti Goyal

10

您可以使用以下格式:

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

1
真好 但是如何将颜色添加到唯一值(例如猫鼬调试默认值)中
coinhndp

你可以用粉笔NPM模块的颜色,你要上色取其值log(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
Vithal雷迪

3

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

node index.js DEBUG=mquery

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.