我已经实现了一个日志文件,该文件将在每分钟之后存储进程的CPU和内存状态。我将文件的最大大小限制在3MB上(这足以满足我的目的)。

每分钟后,脚本将由cron工作调用,脚本将记录该分钟的详细信息, 将把文件重命名为“ log_.log”.

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

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

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

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

提前致谢。

有帮助吗?

解决方案

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

除非您输入的内容与您所取出的内容一样多,否则“在”文件中写入“在”中实际上会导致整个书写位置在您的写作位置被重写为磁盘之后。 附加量便宜得多.

重命名文件以存放指针有效 - 但这是 不是很优雅, ,并使内容更加复杂(对于一个过程,您的流程需要写入文件所在的目录的权利 - 否则,只需写入两个文件就足够了)

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

更新以回答您的评论:

每分钟(甚至每一秒钟)重命名文件 不应该放慢您的系统 值得注意的是,不用担心。

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

其他提示

我很困惑为什么您会重命名您的文件。这做了什么?

日志条目固定尺寸吗?还是可变尺寸?

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

如果条目是可变大小,那么您可能不应从一开始就开始重新编写文件,而不会以某种方式清楚地清楚文件中的“光标”位于何处,而是写入对读取截断的日志条目有弹性的代码。

您可以重新使用现有工具,例如 rrdtool?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top