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


89

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

기록하는 방법?

답변:


200

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

mongoose.set('debug', true);

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

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

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


3
몽구스는 어떻게 로그를 포맷합니까? IE 두 번째 옵션을 사용하여 winston 로그를 허용하고 싶습니다. 나는 몽구스 로그 형식을 좋아하고 같은 방식으로 winston을 사용하여 로그를 형식화합니다.
lostintranslation 2014 년

12

나는 노드 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
    });
});

쿼리가 실행되는 위치에서 파일 이름과 줄 번호를 기록해야합니다. 어쨌든 내가 할 수 있습니까?
Shruti Goyal

12

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

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

1
좋은. 하지만 몽구스 디버그 기본값과 같은 값에만 색상을 추가하는 방법
coinhndp

당신은 당신이 색상 화하려는 값 중 색상에 분필 NPM 모듈을 사용할 수 있습니다log(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
Vithal 레디

3

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

node index.js DEBUG=mquery

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.