我在MacOSX上。我正在写一个多线程程序。一个线程进行日志记录。非日志记录线程可能在任何时候崩溃。
我应该在记录器中采用什么约定/我可以得到什么保证?
我更喜欢这样一种解决方案,即使我在写入的一部分过程中崩溃,之前的写入仍然会写入磁盘,并且当我读回日志时,我可以计算出“啊,我写了100个完整的字符,然后我在第101个崩溃了”。
谢谢!
发布于 2010-03-12 22:28:43
我在Linux上编程,而不是在MacOSX上,但可能在那里也是一样的。
如果您的程序中只有一个线程记录日志,这意味着您在此日志记录线程中缓冲日志记录数据,然后它将其写入一个文件(可能是更大的部分),以避免过多的I/O操作,并使日志记录过程更快。
糟糕的是,如果一个线程出现分段,整个进程将与缓冲的数据一起被销毁。
我所知道的(针对Linux的)解决方案是:
我还不知道这个问题的更好的解决方案,但学习一个会很有趣。
发布于 2010-03-13 18:56:08
正如Dmitry所说,只有几个选项可以确保您真正捕获日志记录输出。你真的需要写你自己的吗?它真的需要在另一个线程上吗?当您通常希望同步记录时,这可能会为崩溃引入一个未命中日志的时间窗口。
Unix上的syslog工具是对系统服务进行可靠日志记录的标准方法。它基本上解决了你所描述的这些类型的问题(即。日志是在进程外处理的,所以如果你崩溃了,你的日志仍然会被保存)。
如果您的应用程序只针对Mac,那么您应该看看Apple System Log facility (ASL)。它提供了比syslog更复杂的应用程序接口及其功能的超集。
https://stackoverflow.com/questions/2431434
复制相似问题