如果应用程序以CTRL_CLOSE_EVENT退出,则boost :: log add_file_log不会写入

时间:2013-10-15 21:37:14

标签: c++ windows boost boost-log

我在Windows 7上,在控制台应用程序中使用v1.54中的boost :: log。我使用带旋转的add_file_log(),只要我的main()函数退出就可以正常工作。但是如果使用powershell CloseMainWindow()从外部终止应用程序,则永远不会写入日志文件。

我已经使用SetConsoleCtrlHandler()设置了一个Windows控件处理程序,并且可以捕获CTRL_CLOSE_EVENT,但我不知道是否有一个我可以调用的boost :: log方法强制日志在我的应用程序退出之前写入的文件。有人有解决方案吗?

谢谢,

  Rob

1 个答案:

答案 0 :(得分:1)

你可能想看两件事。以下是基于我的经验

1)日志文件存在但为空。在这种情况下,使用auto_flush在创建日志消息时将日志刷新到磁盘。另外,如果在CTRL_CLOSE_EVENT发生时没有足够的日志消息被刷新,则最终可能会出现空日志。

2)日志文件退出但不是你认为的那样。在这种情况下,请确保在与目标目录相同的目录中创建日志文件。目标目录在关闭接收器时收集日志文件。如果关键字file_name设置为文件名,则仅在工作目录中创建,而不是目标目录。如果应用程序在不关闭接收器的情况下退出,则文件将不会移动到目标目录。

HTH,