Programing

mongoose가 응용 프로그램에서 실행하는 모든 쿼리를 기록합니다.

lottogame 2020. 11. 7. 08:55
반응형

mongoose가 응용 프로그램에서 실행하는 모든 쿼리를 기록합니다.


nodejs와 mongodb를 사용하는 응용 프로그램이 있습니다. ODM에 몽구스를 사용했습니다. 이제 전체 응용 프로그램에서 mongoose가 실행하는 모든 쿼리를 기록하고 싶습니다.

기록하는 방법?


다음과 같이 디버그 모드를 활성화 할 수 있습니다.

mongoose.set('debug', true);

또는 자신의 디버그 콜백을 추가하십시오.

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

실행 된 모든 수집 방법과 인수를 콘솔에 기록합니다.


노드 bunyan을 사용하고 있습니다. 이것은 쿼리를 디버그하고 추적하는 옵션입니다 (다른 사람에게 도움이 될 수 있음).

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

디버그 로거 매개 변수를 설정할 수도 있습니다.

node index.js DEBUG=mquery

그러나 이것은 쿼리 만 기록 하고 삽입하거나 업데이트하지 않습니다.


다음 형식을 사용할 수 있습니다.

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

또는 원하는 다른 로거 :

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

참고 URL : https://stackoverflow.com/questions/18762264/log-all-queries-that-mongoose-fire-in-the-application

반응형