บันทึกข้อความค้นหาทั้งหมดที่พังพอนไฟในแอปพลิเคชัน


89

ฉันมีแอปพลิเคชันที่ใช้ nodejs และ mongodb ฉันใช้พังพอนสำหรับ ODM แล้ว ตอนนี้ฉันต้องการบันทึกคำถามทั้งหมดที่พังพอนไฟระหว่างแอปพลิเคชันทั้งหมด

จะบันทึกสิ่งเหล่านี้ได้อย่างไร?

คำตอบ:


200

คุณสามารถเปิดใช้งานโหมดดีบักได้ดังนี้:

mongoose.set('debug', true);

หรือเพิ่มการเรียกกลับการแก้ไขข้อบกพร่องของคุณเอง:

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

การดำเนินการนี้จะบันทึกวิธีการรวบรวมที่ดำเนินการและอาร์กิวเมนต์ทั้งหมดไปยังคอนโซล


3
พังพอนจัดรูปแบบบันทึกอย่างไร IE ฉันต้องการใช้ตัวเลือกที่สองเพื่อให้ winston เข้าสู่ระบบ ฉันชอบรูปแบบบันทึกพังพอนและฉันจะจัดรูปแบบบันทึกของฉันด้วย winston ในลักษณะเดียวกัน
lostintranslation

12

ฉันใช้โหนดบันยันนี่เป็นตัวเลือกในการดีบักและติดตามการสืบค้น (อาจช่วยคนอื่นได้)

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
ดี. แต่วิธีการเพิ่มสีให้เป็นค่าเท่านั้นเช่น mongoose debug default
coinhndp

คุณสามารถใช้โมดูลชอล์ก npm เพื่อระบายสีค่าใดก็ได้ที่คุณต้องการทำให้สีlog(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
Vithal Reddy

3

คุณยังสามารถตั้งค่าพารามิเตอร์ตัวบันทึกการดีบัก:

node index.js DEBUG=mquery

แต่จะบันทึกเฉพาะแบบสอบถามเท่านั้นไม่แทรกหรืออัปเดตคำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.