Protokollieren Sie alle Abfragen, die Mungo in der Anwendung auslösen


89

Ich habe eine Anwendung mit NodeJS und Mongodb. Ich habe Mungo für ODM verwendet. Jetzt möchte ich alle Abfragen protokollieren, die während der gesamten Anwendung Mungo auslösen.

Wie protokolliere ich diese?

Antworten:


199

Sie können den Debug-Modus folgendermaßen aktivieren:

mongoose.set('debug', true);

oder fügen Sie Ihren eigenen Debug-Rückruf 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.


3
Wie formatiert Mungo das Protokoll? IE Ich möchte die zweite Option verwenden, um Winston protokollieren zu lassen. Ich mag das Format Mungo-Protokolle und ich würde mein Protokoll mit Winston auf die gleiche Weise formatieren.
Übersetzung

12

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

Ich muss den Dateinamen und die Zeilennummer protokollieren, von wo aus die Abfrage ausgeführt wird. Kann ich das trotzdem?
Shruti Goyal

10

Sie können das folgende Format verwenden:

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

oder ein anderer Logger Ihrer Wahl:

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

1
Nett. Aber wie man Farbe nur zu Wert wie Mungo Debug Standard
hinzufügt

Sie können Kreide npm Modul verwenden, um zu färben, welche Werte Sie kolorieren möchtenlog(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
Vithal Reddy

3

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

node index.js DEBUG=mquery

Dadurch werden jedoch nur Abfragen protokolliert , keine Anweisungen eingefügt oder aktualisiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.