【问题标题】:Perl: Erase lines in a log file using core perl toolsPerl:使用核心 perl 工具擦除日志文件中的行
【发布时间】:2016-03-31 16:43:29
【问题描述】:

首先已经阅读了下面列出的文章,以了解使用谁使用 core perl 编写文件。

-http://perlmaven.com/writing-to-files-with-perl

-http://perlmaven.com/appending-to-files

我有一个疑问。就我而言,我需要编写一个日志文件,但必须是一个轻量级日志,例如 50 行文本。

所以每次交互都需要擦除第一行并写在日志的底部。

您使用什么参数来实现这一点?

我的想法是从日志中获取所有数据并放入一些变量(如数组)并删除第一个值,然后使用open(FILEHANDLE,">filename"); 再次翻动日志。

没有一种 perl 方法可以使用唯一的核心工具来完成这项工作吗?

谢谢。

【问题讨论】:

  • 这通常由“日志轮换”处理。在线搜索;有很多方法可以解决这个问题(当你达到一定的文件大小时创建新日志,或者每小时创建新日志等)。还有一个 Perl 模块 Log4perl,尽管我认为它不包含在任何标准发行版中。

标签: perl file


【解决方案1】:

这是非常低效的,因为您已经正确理解了 - 唯一的方法是重写日志文件,而不是第一行。

如果这就是你所做的一切,那么tail +2 就可以了。

但我建议每次向其中添加一行时都重新编写日志文件效率很低,而最好的做法是编写多个 - 并删除“旧”文件。

例如:

  • stat 获取文件大小,因为您正在读取元数据,而不必读取文件内容。
  • 如果大小大于预定义的限制(50 行 x 80 个字符宽为 4000 字节),则打开一个新文件。
  • 列出其余文件,如果有“太旧”的文件,请删除它们。 (保持“当前”和“以前”,您将始终拥有 4000-8000 字节的“日志”)

如果做不到这一点,您可以按照您建议的方式重写日志文件。请注意,如果您这样做,日志会在短时间内为空/长度为零。而且,您将永远无法在日志上运行tail -f

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多