ghi lại tất cả các truy vấn mongoose kích hoạt trong ứng dụng


87

Tôi có ứng dụng sử dụng nodejs và mongodb. Tôi đã sử dụng mongoose cho ODM. Bây giờ tôi muốn ghi lại tất cả các truy vấn mongoose kích hoạt trong toàn bộ ứng dụng.

Làm thế nào để ghi lại những thứ này?

Câu trả lời:


198

Bạn có thể bật chế độ gỡ lỗi như sau:

mongoose.set('debug', true);

hoặc thêm lệnh gọi lại gỡ lỗi của riêng bạn:

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

Điều này sẽ ghi lại tất cả các phương thức thu thập được thực thi và các đối số của chúng vào bảng điều khiển.


3
mongoose định dạng nhật ký như thế nào. IE Tôi muốn sử dụng tùy chọn thứ hai để đăng nhập winton. Tôi thích định dạng nhật ký mongoose và tôi sẽ định dạng nhật ký của mình w / wonton theo cách tương tự.
lostintranslation,

12

Tôi đang sử dụng node bunyan, đây là một tùy chọn để gỡ lỗi và theo dõi các truy vấn (có thể giúp ích cho người khác)

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

Tôi cần ghi lại tên tệp và số dòng từ nơi truy vấn được thực thi. Có cách nào tôi có thể làm điều đó không?
Shruti Goyal

10

Bạn có thể sử dụng định dạng sau:

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

hoặc bất kỳ trình ghi nhật ký nào khác mà bạn chọn:

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

1
Đẹp. Nhưng làm thế nào để thêm màu sắc với giá trị chỉ như cầy mangut debug mặc định
coinhndp

bạn có thể sử dụng mô-đun npm phấn để tô màu, bất kỳ giá trị nào bạn muốn tô màulog(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
Vithal Reddy

3

Bạn cũng có thể đặt các thông số trình ghi gỡ lỗi:

node index.js DEBUG=mquery

nhưng điều này sẽ chỉ ghi lại các truy vấn , không chèn hoặc cập nhật các câu lệnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.