1

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

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

谢谢,

  Rob
4

1 回答 1

1

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

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

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

高温下,

于 2014-02-25T17:16:24.920 回答