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?

codeofnode
quelle

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.

mr.freeze
quelle
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
    });
});
Lesterzone
quelle
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);
});
Vithal Reddy
quelle
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.

Zilvinas
quelle