ฉันมีแอปพลิเคชันที่ใช้ nodejs และ mongodb ฉันใช้พังพอนสำหรับ ODM แล้ว ตอนนี้ฉันต้องการบันทึกคำถามทั้งหมดที่พังพอนไฟระหว่างแอปพลิเคชันทั้งหมด
จะบันทึกสิ่งเหล่านี้ได้อย่างไร?
ฉันมีแอปพลิเคชันที่ใช้ nodejs และ mongodb ฉันใช้พังพอนสำหรับ ODM แล้ว ตอนนี้ฉันต้องการบันทึกคำถามทั้งหมดที่พังพอนไฟระหว่างแอปพลิเคชันทั้งหมด
จะบันทึกสิ่งเหล่านี้ได้อย่างไร?
คำตอบ:
คุณสามารถเปิดใช้งานโหมดดีบักได้ดังนี้:
mongoose.set('debug', true);
หรือเพิ่มการเรียกกลับการแก้ไขข้อบกพร่องของคุณเอง:
mongoose.set('debug', function (coll, method, query, doc [, options]) {
//do your thing
});
การดำเนินการนี้จะบันทึกวิธีการรวบรวมที่ดำเนินการและอาร์กิวเมนต์ทั้งหมดไปยังคอนโซล
ฉันใช้โหนดบันยันนี่เป็นตัวเลือกในการดีบักและติดตามการสืบค้น (อาจช่วยคนอื่นได้)
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
});
});
คุณสามารถใช้รูปแบบต่อไปนี้:
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);
});
log(` CPU: ${chalk.red('90%')} RAM: ${chalk.green('40%')} DISK: ${chalk.yellow('70%')} `);
คุณยังสามารถตั้งค่าพารามิเตอร์ตัวบันทึกการดีบัก:
node index.js DEBUG=mquery
แต่จะบันทึกเฉพาะแบบสอบถามเท่านั้นไม่แทรกหรืออัปเดตคำสั่ง