0

我已经实现了一个日志文件,它将在每分钟之后存储进程的 cpu 和内存状态。我将文件的最大大小限制为 3MB(这对于我的目的来说已经足够了)。

该脚本将在每分钟后由 cron 作业调用,该脚本将记录该分钟的详细信息并将文件重命名为 "Log_.log"

当大小达到“3MB - 100 字节”时,我将文件指针重置为指向开头,并将覆盖日志文件中的第一个条目,现在将文件重命名为“Log_<0+some offset>.log”

当我每分钟重命名文件以更新文件指针位置时,这是一种好的/有效的方法吗?

为此,我不想维护多个日志文件。

我的另一个选择是保持文件中的文件指针位置,但是....另一个文件!如果此选项不错,则对维护一个不感兴趣:)

提前致谢。

4

2 回答 2

4

你是工程师吗?这是一些简单任务的一个很好的例子,通过一个完美工作但过于复杂的解决方案来解决。

除非您放入的内容与您取出的内容一样多的字节,否则写入“in”文件实际上会导致您写入位置之后的整个后续部分被重写到磁盘。追加便宜得多

重命名文件以存储指针有效 - 但它不是很优雅,并且使事情变得更复杂(一方面,您的进程需要对文件所在目录的写入权限 - 否则只需对两个文件的写入权限就足够了)

除非磁盘空间是一个问题(实际上,它很少是),否则您的方法效率低于将所有内容附加到文件,并在文件达到其最大大小时旋转文件。这样,您始终可以使用最后 3MB 的日志,并且当前文件中最多还有 3MB。它也将使解析文件变得更加容易,而不是重新计算整个指针位置。

更新以回答您的评论:

每分钟(甚至每秒)重命名文件不会显着降低系统速度,不用担心。

我们关心的主要是“为什么你认为你需要重命名文件”。技术上并没有更好,从逻辑的角度来看也没有更好,它使许多其他(未来)任务变得更加困难。您可以将文件指针存储在单独的文件中,或者存储在文件末尾,并且有更好的^H^H^H^H^H^H 更简单的解决方案,根本不需要文件指针。

于 2011-01-13T06:14:16.790 回答
0

我很困惑你为什么要重命名你的文件。这有什么作用?

日志条目的大小是否固定?还是可变大小?

如果条目是固定大小的,那么从头开始重写现有文件就没有问题:您的文件中永远不会有不完整的条目,如果您正在向文件写入计数器或时间戳,它应该清楚“光标”的位置。

如果条目是可变大小的,那么您可能不应该从头开始重写文件而不以某种方式明确“光标”在文件中的位置,并编写能够弹性读取截断日志条目的代码。

您可以重复使用现有的工具,例如RRDtool吗?

于 2011-01-13T04:51:57.067 回答