registra tutte le query che mongoose sparano nell'applicazione


89

Ho un'applicazione che utilizza nodejs e mongodb. Ho usato la mangusta per ODM. Ora voglio registrare tutte le query che mongoose sparano durante l'intera applicazione.

Come registrarli?

Risposte:


200

Puoi abilitare la modalità di debug in questo modo:

mongoose.set('debug', true);

o aggiungi il tuo callback di debug:

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

Questo registrerà tutti i metodi di raccolta eseguiti ei loro argomenti nella console.


3
come mongoose formatta il registro. IE vorrei utilizzare la seconda opzione per consentire a Winston di accedere. Mi piace il formato dei log di mangusta e formatterò il mio log con winston allo stesso modo.
lostintranslation

12

Sto usando il nodo bunyan, questa è un'opzione per eseguire il debug e tenere traccia delle query (potrebbe aiutare qualcun altro)

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

Ho bisogno di registrare il nome del file e il numero di riga da cui viene eseguita la query. C'è comunque che posso farlo?
Shruti Goyal

12

Puoi utilizzare il seguente formato:

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

o qualsiasi altro logger di tua scelta:

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

1
Bello. Ma come aggiungere colore a un valore come l'impostazione predefinita di debug di mangusta
coinhndp

puoi usare il modulo gesso npm per colorare, a prescindere dai valori che desideri colorarelog(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
Vithal Reddy,

3

Puoi anche impostare i parametri del logger di debug:

node index.js DEBUG=mquery

ma questo registrerà solo le query , non inserirà o aggiornerà le istruzioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.