日志程序在一个单独的c++线程中

Logger in a separate C++ thread?

本文关键字:单独 c++ 线程 一个 程序 日志      更新时间:2023-10-16

在深度循环中进行日志记录时,是否存在允许在当前线程中生成日志消息,然后从另一个线程将其写入磁盘的日志记录器?

由于在磁盘上写入是最长的操作,因此这应该可以提高日志记录器的效率。

或者由于缓存的原因,差异可以忽略不计?

将操作排队等待另一个线程处理,然后立即返回的日志记录器(实际上是任何程序)称为异步的。异步日志记录器确实存在。这是我用过的一个:g2log。它是跨平台的,并在windows和linux上进行了测试。

异步日志记录是否对你有任何好处,取决于你记录了多少东西

您在哪里登录?窗户吗?Linux ?

如果您正在使用Linux,并且在一个对性能非常敏感的环境中工作,您可以看看ltng。有一个FOSDEM Talk (Youtube)是关于他们的日志记录方法的。它的本质是:不记录字符串,而是记录错误代码和参数到(共享)内存,并使用单独的进程将日志写入磁盘(映射到另一个进程的共享内存在核心转储中存活)。

另一个异步记录器来自POCO库:

http://pocoproject.org/docs/Poco.AsyncChannel.html