rejestruj wszystkie zapytania, które mangusty odpalają w aplikacji

87

Mam aplikację używającą nodejs i mongodb. Użyłem mangusty do ODM. Teraz chcę rejestrować wszystkie zapytania uruchamiane przez mangustę podczas całej aplikacji.

Jak to zarejestrować?

codeofnode
źródło

Odpowiedzi:

198

Możesz włączyć tryb debugowania w następujący sposób:

mongoose.set('debug', true);

lub dodaj własne wywołanie zwrotne debugowania:

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

Spowoduje to zarejestrowanie wszystkich wykonanych metod kolekcji i ich argumentów w konsoli.

mr.freeze
źródło
3
jak mongoose formatuje dziennik. IE Chciałbym użyć drugiej opcji, aby winston logował się. Podoba mi się format dzienników mangusty i formatowałbym mój dziennik w / winston w ten sam sposób.
Lostintranslation
12

Używam węzła bunyan, to jest opcja debugowania i śledzenia zapytań (może pomóc komuś innemu)

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
źródło
Muszę zarejestrować nazwę pliku i numer wiersza, z którego wykonywane jest zapytanie. Czy w ogóle mogę to zrobić?
Shruti Goyal
10

Możesz użyć następującego formatu:

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

lub dowolny inny wybrany rejestrator:

mongoose.set("debug", (collectionName, method, query, doc) => {
    logger(`${collectionName}.${method}`, JSON.stringify(query), doc);
});
Vithal Reddy
źródło
1
Ładny. Ale jak dodać kolor tylko do wartości, takiej jak domyślne debugowanie mangusty
coinhndp
możesz użyć modułu chalk npm do kolorowania, niezależnie od tego, które wartości chcesz pokolorowaćlog(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
Vithal Reddy
3

Możesz również ustawić parametry rejestratora debugowania:

node index.js DEBUG=mquery

ale spowoduje to tylko rejestrowanie zapytań , a nie wstawianie lub aktualizowanie instrukcji.

Zilvinas
źródło