c++ - 如何保护日志免受应用程序崩溃?

标签 c++ logging crash fstream

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

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

最佳答案

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

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

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

关于c++ - 如何保护日志免受应用程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267984/

相关文章:

crash - E_UNEXPECTED UWP 灾难性故障

c++ - 如何在以前读取的行中找到一些单词并在输出中删除它 - c++中的读/写字符串

c++ - 重命名变量类型

SQL 用于数据记录?

php - 将URL添加到错误日志(Wordpress,Nginx,PHP7)

java - 方面.jcabi : @Loggable doesn't add logs to the output

c++ - 为类数据成员调用复制构造函数和 operator=

c++ - 从另一个指针到一个基类的多重继承和泛型访问

C++ Win32 未处理的异常处理程序

android - 是否可以从 Android 应用程序的 C++ 回溯中找到函数名称?