gpt4 book ai didi

c++ - 什么时候写异步日志

转载 作者:太空宇宙 更新时间:2023-11-04 14:14:33 25 4
gpt4 key购买 nike

我正在尝试编写异步日志记录类,但无法决定何时将日志写入文件。

现在,我正在考虑将所有日志存储在一个 vector 中,然后按时间戳对它们进行排序。

问题是什么时候应该将日志写入文件?如果我在写入磁盘之前等待 N 个日志,我可能会错过一个日志条目,或者如果我们已经达到 vector 中的 N 个日志,则可能会乱序写入日志。

我正在考虑使用某种计时器,但我不确定那是否会更好。

如果有任何想法,我将不胜感激。

最佳答案

我同意关于在没有缓冲(或显式刷新)的情况下乱写它们的评论。但是,如果你想按顺序编写它们,我会有一个单独的线程来管理写入。您将定义一个特定的滞后量(大概以秒为单位),您可以合理地保证该滞后量将涵盖所有迟到的情况。

所以从最基本的意义上讲,你会有一个类似于以下的线程函数:

time_t writeDelay = 10;  // 10 seconds

for(;;)
{
// Sleep for a second
//[OS-specific code here]

time_t now;
time(&now);
WriteLogEntriesUpTo(now - writeDelay);
}

这里的问题是,如果操作不当,将日志条目排序到 vector 中可能会给记录器带来大量开销。至少使用 deque 这样您就可以轻松地从前面弹出条目。如果我要这样做,我可能会为我的日志字符串和队列中的简单记录使用一个大缓冲区(实际上是一个内存池)。带有时间戳和指针的东西会使排序变得容易。

struct LogEntry {
time_t timestamp;
char *message;
};

我没有将它们放在 deque 中,而是实现了某种有序列表(同样是内存池)。让这一切变得如此快速将是非常繁琐的。您考虑得越多,乱写就越有意义。

关于c++ - 什么时候写异步日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12379505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com