我最近做过一些深入的工作, 我想知道你认为什么更适合伐木。 是不是更好。
一个。每次我想写入我的日志,打开文件,写入它 然后马上关闭它,这样就没有真正的失败机会了 在发生严重故障或崩溃的情况下的信息。
B中。可以在每个主要部分完成后定期保存 这意味着我可以缩小错误的范围。
还有其他建议吗? 我不想用大量文本打开和保存一整天 我需要录制,但我不想丢失我的信息粒度。 我是用C ++写的,很抱歉以前没有提过它。
答案 0 :(得分:5)
据我所知,流刷新相当于保存是相当普遍的(强制性的?)。
也就是说,当你说:
file.flush();
写下等待写的一切。请注意,std::endl;
也会调用flush
。所以,保持开放状态,只需在信息转储后刷新。
答案 1 :(得分:2)
最好的解决方案是使用现有的库。那里有许多优秀,经过良好测试和流行的图书馆。它们通常为您提供所需的所有多功能性,并为您节省管理文件的麻烦。此外,它们允许您将日志保存到各种目标,而不一定是文件。我使用了Google Log Library和ACE:
ACE是一个很大的库,日志只是其中的一小部分,所以如果你只需要记录,也许它不是一个好的选择。无论如何,不要试图自己实现日志记录,省去更有用的东西;当然,除非您对记录引擎有特殊兴趣。
答案 2 :(得分:1)
我建议使用具有良好工具的Log for C++ (log4cpp)。
答案 3 :(得分:1)
一个。每次我想写信给我 登录,打开文件,然后写入 马上把它关闭所以它有 没有真正丢失信息的机会 在严重故障的情况下或 崩溃。
B中。定期保存,也许之后 每个主要部分都已完成 意思是我可以缩小范围 错误是。
还有其他建议吗?
让你的大脑更长一点 - 你会想出其他几十个想法。问题是编写记录器可以像你想的那样复杂 - 记录器可以自己成为完整的软件。
Here这是一篇我非常喜欢的关于记录器类设计的文章。看一看。
如果您不愿意/没有带宽来支持创建用于记录的新模块,请像其他人已经建议的那样去寻找现有的库。
您如何选择合适的图书馆?您真正应该担心的是您想要什么样的日志以及您所处的开发阶段。对消息进行排序,看看库是否支持以清晰一致的方式对它们进行分类。您的邮件需要多个接收器吗?你的图书馆支持吗?如果您的代码正在生产中,您将不得不担心更多。您需要事务日志系统吗?您是否需要操作的原子性(以及日志)?您是否需要能够回滚邮件?
希望这有帮助。
答案 4 :(得分:0)
在Unix系统上,你有一个叫做syslog的东西(顺便提一下,它是一个库调用,还有openlog和closelog,以及一个服务)。在Windows中我认为有事件日志,但不知道那个API。
无论如何,由于syslog(以及Windows中的事件日志)通过IPC(有时甚至是通过网络远程登录)记录,因此该过程将被解耦,并且不会受到程序崩溃的影响。这样你就可以将保存文件的责任转嫁给syslog服务。请注意,这包括logrotation和压缩日志文件等内容,以及让您有机会使用标准化工具来评估所述日志文件(例如IDS)。
现在,那说,系统崩溃(电源故障,或其他什么)是一个完全不同的故事,我不知道你是否担心这个问题,如果你想详细说明什么样的系统你正在努力,建议更合适的东西可能更容易。