wake-up-neo.com

protokollieren Sie alle Abfragen, die Moose in der Anwendung abfeuern

Ich habe Anwendung mit nodejs und mongodb. Ich habe Mungo für ODM verwendet. Nun möchte ich alle Abfragen protokollieren, die während der gesamten Anwendung von Mungos ausgelöst werden.

Wie melde ich diese?

59
codeofnode

Sie können den Debug-Modus wie folgt aktivieren:

mongoose.set('debug', true);

oder fügen Sie Ihren eigenen Debug-Callback hinzu:

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

Dadurch werden alle ausgeführten Erfassungsmethoden und ihre Argumente in der Konsole protokolliert.

135
mr.freeze

Ich verwende Node Bunyan. Dies ist eine Option zum Debuggen und Verfolgen von Abfragen (kann jemand anderem helfen)

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

Sie können auch Debug-Logger-Parameter festlegen:

node index.js DEBUG=mquery

dies wird jedoch nur log Abfragen protokollieren, keine Anweisungen einfügen oder aktualisieren.

3
Zilvinas

Sie können das folgende Format verwenden:

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

oder einen anderen Logger Ihrer Wahl:

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