registrar todas as consultas que o mangusto dispara no aplicativo

86

Eu tenho um aplicativo usando nodejs e mongodb. Eu usei o mangusto para ODM. Agora, quero registrar todas as consultas que o mangusto dispara durante todo o aplicativo.

Como registrar isso?

codeofnode
fonte

Respostas:

197

Você pode ativar o modo de depuração da seguinte forma:

mongoose.set('debug', true);

ou adicione seu próprio retorno de chamada de depuração:

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

Isso registrará todos os métodos de coleta executados e seus argumentos no console.

mr.freeze
fonte
3
como o mangusto formata o log. IE, gostaria de usar a segunda opção para permitir o log do winston. Eu gosto do formato de logs do mongoose e gostaria de formatar meu log com winston da mesma maneira.
perdeu a tradução
12

Estou usando o node bunyan, esta é uma opção para depurar e rastrear consultas (pode ajudar outra pessoa)

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
fonte
Preciso registrar o nome do arquivo e o número da linha de onde a consulta é executada. Existe alguma maneira que eu possa fazer isso?
Shruti Goyal
10

Você pode usar o seguinte formato:

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

ou qualquer outro registrador de sua escolha:

mongoose.set("debug", (collectionName, method, query, doc) => {
    logger(`${collectionName}.${method}`, JSON.stringify(query), doc);
});
Vithal Reddy
fonte
1
Agradável. Mas como adicionar cor a apenas valores como o padrão de depuração do mongoose
coinhndp
você pode usar o módulo de giz npm para colorir, quaisquer valores que você deseja colorirlog(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
Vithal Reddy
3

Você também pode definir os parâmetros do registrador de depuração:

node index.js DEBUG=mquery

mas isso apenas registrará consultas , não inserirá ou atualizará instruções.

Zilvinas
fonte