如何保护日志免受应用程序崩溃的影响?

NPS*_*NPS 5 c++ crash logging fstream

我创建了一个简单的记录器,它将所有重要的内容记录到一个文本文件中。我正在使用,std::ofstream但有一个问题 - 当程序std::ofstream::close()由于任何原因(例如崩溃)没有关闭文件(调用)时,创建的日志实际上是空的(0大小)。由于日志在特殊情况下(当出现问题时)最有用 - 您会看到问题。

有什么办法可以保护我的日志免受这种影响吗?我可以尝试在写入每几行并使用追加后关闭文件 - 但这仍然不能保护我免受程序在日志记录中间/关闭文件之前崩溃的情况的影响。有什么解决办法还是我注定要失败?

Ale*_*aev 4

您应该使用flush方法,它可以精确地解决您面临的问题。

还有另一种方法可以被认为更安全,但需要更多的努力来实施和测试。该方法归结为所谓的进程间通信 (IPC)。简而言之,您可以将记录器实现为单独的记录器应用程序,该应用程序将通过特定协议(接口)与您的目标应用程序进行通信。您可以自己开发此类协议或使用现有协议之一(通常非常通用,即通用)。因此,如果您的目标应用程序崩溃,它不会拖拽记录器应用程序,因此记录器可以安全地完成其工作。

这种方法通常用于一些庞大、复杂且安全关键的系统。然而,我想在你的情况下,这绝对是一种矫枉过正,而且在flush()每个附加都绰绰有余之后。