【发布时间】:2010-10-13 08:33:02
【问题描述】:
我有一个应用程序(服务器应用程序)需要实现大量的日志记录,并且不应该通过启用日志记录来影响性能。
应用程序有一个执行工作的工作线程的线程池。最初我打算只登录这些线程池线程,但后来我需要锁定几乎整个线程,所以我的“多线程”应用程序出现了。
我一直在寻找从多个线程进行日志记录的更好方法,我发现使用队列或环形缓冲区可能是一个想法。
任何人都可以建议(也许从经验中)任何好的方法来为多线程应用程序实现有效的日志记录(主要是到文件),同时也应该保持一定的性能?
我想使用 Boost 日志库。
【问题讨论】:
-
可能值得指出一个显而易见的事实:一旦您开始执行异步日志记录,如果您的应用程序崩溃,您还有丢失最后几个日志条目的风险。由于应用程序在启动日志记录后立即恢复,因此您无法保证所有日志消息在任何给定时间都已实际写入磁盘。
-
@jalf:那你建议我怎么做?
-
没有线索。取决于你的需要。在您的情况下,异步日志记录机制可能仍然是最好的方法,我只是指出您必须注意的一个重要警告。当然,一种可能的选择可能是将日志数据写入比硬盘驱动器更快的介质(SSD 磁盘?快速网络连接?),因此它不会像硬盘驱动器写入那样在宝贵的毫秒内阻塞主机应用程序。
-
您可以添加一个在日志记录期间会阻塞的日志记录级别(严重?),这样至少您可以在调查期间确定您的日志。无论如何,比起记录崩溃,更喜欢 Postmortem(核心)。
-
在此处查看更多信息:stackoverflow.com/questions/696321/…
标签: c++ multithreading logging