【问题标题】:Keeping 'almost complete' logs even when system crashes即使系统崩溃也能保持“几乎完整”的日志
【发布时间】:2010-08-22 13:00:49
【问题描述】:

我们有一个在 windows 和 unix 上运行的 c++ 应用程序(控制台)。 此应用程序使用输出文件来输出系统调用/打印/等的详细日志文件。 问题是,在某些情况下,我们可能会在添加新功能后获得 11/2 信号。

现在,每当发生这种情况时,我们都不会从日志文件中获取“几乎完整”的信息来追踪错误/问题的根源,因为当信号 11 出现时输出文件没有正确关闭。 (它只是部分或零大小)

我们考虑在每个 fprintf 行打印之后添加一个刷新命令。 问:

  1. 这算是一种好的做法吗?
  2. fflush 在 windows 平台上运行良好吗?
  3. 在系统可能意外崩溃时保留日志文件的任何想法/其他方法?

【问题讨论】:

  • 在另一种语言中,当事物可能崩溃时,我倾向于使用刷新。但是,冲洗会减慢速度。仅在不稳定的区域周围使用。或者,将消息转储到 Microsoft 队列或其他一些稳定的内存位置(出于速度目的)。当然,最好的办法是找出并修复崩溃。

标签: windows logging signals crash fflush


【解决方案1】:

您需要将日志数据发送到文件,而不是发送到您可以在 30 分钟内创建的外部日志记录应用程序。可以通过套接字或通过管道或使用 SendMessage() Windows API(如果您以 Windows 为目标)发送输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 2016-05-08
    • 2019-12-16
    相关资源
    最近更新 更多