boost::log add_file_log tidak menulis jika aplikasi keluar dengan CTRL_CLOSE_EVENT

Saya menggunakan Windows 7, menggunakan boost::log in v1.54 di aplikasi konsol. Saya menggunakan add_file_log() dengan rotasi, yang berfungsi dengan baik selama fungsi main() saya keluar. Namun jika aplikasi dihentikan secara eksternal dengan PowerShell CloseMainWindow(), file log tidak akan pernah ditulis.

Saya telah menyiapkan pengendali kontrol windows menggunakan SetConsoleCtrlHandler(), dan dapat menjebak CTRL_CLOSE_EVENT, tetapi saya tidak tahu apakah ada metode boost::log yang dapat saya panggil untuk memaksa file log ditulis sebelum aplikasi saya keluar. Adakah yang punya solusi untuk ini?

Terima kasih,

  Rob

person Rob    schedule 15.10.2013    source sumber


Jawaban (1)


Dua hal yang mungkin ingin Anda lihat. Berikut ini berdasarkan pengalaman saya

1) File log ada tetapi kosong. Dalam hal ini gunakan auto_flush untuk menghapus log ke disk saat pesan log dibuat. Jika tidak, Anda bisa mendapatkan log kosong jika tidak ada cukup pesan log untuk dihapus ketika CTRL_CLOSE_EVENT terjadi.

2) File log keluar tetapi tidak seperti yang Anda kira. Dalam hal ini pastikan bahwa file log dibuat di direktori yang sama dengan direktori target. Direktori target mengumpulkan file log ketika sink ditutup. Jika kata kunci nama_file disetel ke nama file saja maka akan dibuat di direktori kerja, bukan direktori target. Jika aplikasi keluar tanpa menutup sink maka file tidak akan dipindahkan ke direktori target.

HTH,

person Jott    schedule 25.02.2014