web-dev-qa-db-fra.com

enregistre toutes les requêtes de la mangouste dans l'application

J'ai une application utilisant nodejs et mongodb. J'ai utilisé la mangouste pour ODM. Maintenant, je veux enregistrer toutes les requêtes de cette mangouste au cours de l’application.

Comment se connecter?

59
codeofnode

Vous pouvez activer le mode débogage comme suit:

mongoose.set('debug', true);

ou ajoutez votre propre rappel de débogage:

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

Cela enregistrera toutes les méthodes de collecte exécutées et leurs arguments dans la console.

135
mr.freeze

J'utilise le noeud Bunyan, c'est une option pour déboguer et suivre les requêtes (peut aider quelqu'un d'autre)

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

Vous pouvez également définir les paramètres du journal de débogage:

node index.js DEBUG=mquery

mais cela ne fera que consigner requêtes , et non insérer ou mettre à jour des instructions.

3
Zilvinas

Vous pouvez utiliser le format suivant:

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

ou tout autre enregistreur de votre choix:

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