registrar todas las consultas que disparan mangostas en la aplicación

86

Tengo una aplicación que usa nodejs y mongodb. He usado mangosta para ODM. Ahora quiero registrar todas las consultas que dispara la mangosta durante toda la aplicación.

¿Cómo registrar estos?

codeofnode
fuente

Respuestas:

197

Puede habilitar el modo de depuración así:

mongoose.set('debug', true);

o agregue su propia devolución de llamada de depuración:

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

Esto registrará todos los métodos de recopilación ejecutados y sus argumentos en la consola.

señor freeze
fuente
3
¿Cómo formatea la mangosta el registro? Es decir, me gustaría usar la segunda opción para permitir que winston inicie sesión. Me gusta el formato de registros de mangosta y formatearía mi registro con winston de la misma manera.
lostintranslation
12

Estoy usando node bunyan, esta es una opción para depurar y rastrear consultas (puede ayudar a alguien más)

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
fuente
Necesito registrar el nombre del archivo y el número de línea desde donde se ejecuta la consulta. ¿Hay alguna forma de que pueda hacer eso?
Shruti Goyal
10

Puede utilizar el siguiente formato:

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

o cualquier otro registrador de su elección:

mongoose.set("debug", (collectionName, method, query, doc) => {
    logger(`${collectionName}.${method}`, JSON.stringify(query), doc);
});
Vithal Reddy
fuente
1
Agradable. Pero la forma de añadir color a sólo un valor predeterminado como mangosta de depuración
coinhndp
puede usar el módulo tiza npm para colorear, los valores que desee colorearlog(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
Vithal Reddy
3

También puede configurar los parámetros del registrador de depuración:

node index.js DEBUG=mquery

pero esto solo registrará consultas , no insertará ni actualizará declaraciones.

Zilvinas
fuente