使用内存映射技术的日志记录机制

时间:2009-11-25 09:13:25

标签: c++ logging

只需创建所需大小的文件(CreateFileMapping或mmap)的映射,在缓冲区中写入行,并在达到最大数量时重新开始。 - 你的写一个圆形文件在c的答案。

我也在编写LogWriter模块。在这个例子中,我使用mmap()将整个文件映射到内存。

我正在维护读取和写入指针。我想在追加模式下将日志写入文件。然后,当第一次写入时启动记录器服务时,它会附加日志。但是当下次运行服务时系统关闭时,它不会在最后附加数据。即使系统关闭,我也希望保持写入和读取偏移。如何实现这一目标..?

如何查找写入日志文件的数据量。 ??

2 个答案:

答案 0 :(得分:1)

如何保留文件的前16个字节来存储两个uint64_t值(当然是按网络字节顺序)。请保持阅读和阅读在那里写入偏移量,当文件打开时它们总是可用的。

当然,如果您希望能够使用less等工具读取文件,这可能是一个小问题,但您没有提到这些要求,所以我假设没有。< / p>

答案 1 :(得分:0)

正如John所提到的,你可以将指针保存在缓冲区中 - 但是很难确保它们按照正确的顺序更新缓冲区中的数据。

您可能想要考虑这个替代的,更简单的系统:

  • 通常以附加模式(无mmap)将数据写入日志文件,直到达到大小阈值
  • 达到阈值时,切换到新的日志文件
  • 当您拥有超过一定数量的日志文件时,请删除最早的日志文件。