我创建了一个简单的记录器,它可以将所有重要的事情记录到一个文本文件中。我正在使用 std::ofstream
但有一个问题 - 当程序没有关闭文件(调用 std::ofstream::close()
)时原因(如崩溃),创建的日志实际上是空的(0 大小)。由于日志在异常情况下(出现问题时)最有用 - 您会发现问题所在。
有什么方法可以保护我的日志免受这种影响吗?我可以尝试在每写几行并使用追加后关闭文件 - 但这仍然不能保护我免受程序在日志记录中间/关闭文件之前崩溃的情况。有什么解决办法还是我注定要失败?
最佳答案
你应该雇用 flush 方法,它可以精确解决您所面临的问题。
还有另一种方法可以被认为更安全,但需要更多的努力来实现和测试。该方法归结为所谓的 inter-process communication (IPC) 强>。简而言之,您可以将您的记录器实现为一个单独的记录器应用程序,它将通过特定的协议(protocol)(接口(interface))与您的目标应用程序通信。您可以自己开发此类协议(protocol)或使用现有协议(protocol)之一(通常非常通用,即通用)。因此,如果您的目标应用程序崩溃,它不会拖拽记录器应用程序,因此记录器可以安全地完成其工作。
这种方法通常用于一些庞大、复杂且安全关键的系统。但是,我想在您的情况下,这绝对是一种矫枉过正的行为 flush()
每次追加之后绰绰有余。
关于c++ - 如何保护日志免受应用程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267984/