当前位置:  开发笔记 > 编程语言 > 正文

如何使用Perl修剪日志文件?

如何解决《如何使用Perl修剪日志文件?》经验,为你挑选了1个好方法。

我最近提出了一种情况,一旦它们超过一定大小,我需要修剪一些相当大的日志文件.除了每个文件中的最后1000行之外的所有内容都被处理掉,作业每隔半小时由cron运行一次.我的解决方案是简单地浏览文件列表,检查大小并在必要时修剪.

for $file (@fileList) {
  if ( ((-s $file) / (1024 * 1024)) > $CSize) {
      open FH, "$file" or die "Cannot open ${file}: $!\n";
      $lineNo = 0;
      my @tLines;

      while() {
        push @tLines, $_;
        shift @tLines if ++$lineNo < CLLimit;
      }
      close FH;

      open FH, ">$file" or die "Cannot write to ${file}: $!\n";
      print FH @tLines;
      close FH;
}

这在当前形式下工作,但是对于大型日志文件(尤其是具有100_000 +行的文件)存在大量开销,因为需要读取每一行并在必要时进行移位.

有没有什么方法可以只读取文件的一部分,例如在这种情况下我希望只能访问最后的"CLLimit"行.由于脚本部署在一个已经看到更好日子的系统上(想想Celeron 700MHz和64MB RAM),我正在寻找使用Perl的更快的替代方案.



1> Jay..:

我意识到你想要使用Perl,但如果这是一个UNIX系统,为什么不使用"tail"实用程序进行修剪呢?您可以使用非常简单的脚本在BASH中执行此操作:

if [ `stat -f "%z" "$file"` -gt "$MAX_FILE_SIZE" ]; then
    tail -1000 $file > $file.tmp
    #copy and then rm to avoid inode problems
    cp $file.tmp $file
    rm $file.tmp
fi

话虽这么说,你可能会发现这篇文章非常有用,如果你已经开始使用Perl了.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有