マングースがアプリケーションで発火するすべてのクエリをログに記録する


89

nodejsとmongodbを使用したアプリケーションがあります。私はODMにマングースを使用しました。ここで、アプリケーション全体でマングースが発生するすべてのクエリをログに記録したいと思います。

これらをログに記録する方法は?

回答:


200

次のようにデバッグモードを有効にできます。

mongoose.set('debug', true);

または、独自のデバッグコールバックを追加します。

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

これにより、実行されたすべての収集メソッドとその引数がコンソールに記録されます。


3
マングースはどのようにログをフォーマットしますか。IE2番目のオプションを使用してwinstonをログに記録させたいと思います。私はマングースログのフォーマットが好きで、ウィンストン付きのログも同じようにフォーマットします。
lostintranslation

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

クエリが実行された場所からファイル名と行番号をログに記録する必要があります。とにかく私はそれを行うことができますか?
ShrutiGoyal20年

12

次の形式を使用できます。

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%')} `);
VithalReddy19年

3

デバッグロガーパラメータを設定することもできます。

node index.js DEBUG=mquery

ただし、これはクエリのみをログに記録し、ステートメントの挿入や更新は行いません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.