【问题标题】:log all queries that mongoose fire in the application记录所有在应用程序中触发的 mongoose 查询
【发布时间】:2013-09-16 17:19:14
【问题描述】:

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

如何记录这些?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

    mongoose.set('debug', true);
    

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

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

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

    【讨论】:

    • 猫鼬如何格式化日志。 IE 我想用第二个选项让winston登录。我喜欢 mongoose 日志格式,我会以同样的方式格式化我的日志 w/winston。
    【解决方案2】:

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

    【讨论】:

    • 我需要记录执行查询的文件名和行号。反正我能做到吗?
    【解决方案3】:

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

    node index.js DEBUG=mquery
    

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

    【讨论】:

      【解决方案4】:

      您可以使用以下格式:

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

      【讨论】:

      • 不错。但是如何只为像猫鼬调试默认值这样的值添加颜色
      • 你可以使用 chalk npm 模块来着色,无论你想着色哪个值log(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 2016-08-25
      • 2010-11-04
      相关资源
      最近更新 更多