boost::log add_file_log ไม่เขียนหากแอปออกด้วย CTRL_CLOSE_EVENT

ฉันใช้ Windows 7 โดยใช้ boost::log in v1.54 ในแอปพลิเคชันคอนโซล ฉันใช้ add_file_log() กับการหมุน ซึ่งทำงานได้ดีตราบใดที่ฟังก์ชัน main() ของฉันออก แต่ถ้าแอปถูกยกเลิกภายนอกด้วย PowerShell CloseMainWindow() ไฟล์บันทึกจะไม่ถูกเขียน

ฉันได้ตั้งค่าตัวจัดการการควบคุม windows โดยใช้ SetConsoleCtrlHandler() และสามารถดักจับ CTRL_CLOSE_EVENT ได้ แต่ฉันไม่รู้ว่ามีวิธี boost::log หรือไม่ ฉันสามารถเรียกใช้เพื่อบังคับให้เขียนไฟล์บันทึกก่อนที่แอปจะออก ไม่มีใครมีวิธีแก้ปัญหาสำหรับเรื่องนี้หรือไม่?

ขอบคุณ,

  Rob

person Rob    schedule 15.10.2013    source แหล่งที่มา


คำตอบ (1)


สองสิ่งที่คุณอาจต้องการดู ต่อไปนี้ขึ้นอยู่กับประสบการณ์ของฉัน

1) มีไฟล์บันทึกอยู่แต่ว่างเปล่า ในกรณีนี้ ให้ใช้ auto_flush เพื่อล้างบันทึกลงดิสก์เมื่อมีการสร้างข้อความบันทึก ไม่เช่นนั้นคุณอาจจบลงด้วยบันทึกว่างเปล่าหากมีข้อความบันทึกไม่เพียงพอที่จะถูกล้างเมื่อ CTRL_CLOSE_EVENT เกิดขึ้น

2) ไฟล์บันทึกออกแต่ไม่ใช่อย่างที่คุณคิด ในกรณีนี้ ตรวจสอบให้แน่ใจว่าไฟล์บันทึกถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับไดเร็กทอรีเป้าหมาย ไดเร็กทอรีเป้าหมายรวบรวมไฟล์บันทึกเมื่อปิดซิงก์ หากตั้งค่าคีย์เวิร์ด file_name เป็นชื่อไฟล์ ระบบจะถูกสร้างขึ้นในไดเร็กทอรีการทำงาน ไม่ใช่ไดเร็กทอรีเป้าหมาย หากแอปพลิเคชันออกโดยไม่ปิดซิงก์ ไฟล์จะไม่ถูกย้ายไปยังไดเร็กทอรีเป้าหมาย

HTH,

person Jott    schedule 25.02.2014