Linux Perl处理日志文件

Linux Perl处理日志文件,linux,perl,logging,Linux,Perl,Logging,我想创建一个在linux中处理日志文件的perl脚本。想法是将“有趣”的线条与其他线条进行分类。我的计划是: -制作日志文件的临时副本(因为它是不断写入的) -搜索“有趣”的行(关键字) -将它们复制到另一个文件“log.processed”中 -把那个文件通过电子邮件发给我。(我认为这部分将由cron完成) 直到现在我有了这个: #!/usr/bin/perl #use strict; use warnings; use File::Copy; copy("/home/hq-asa.log"

我想创建一个在linux中处理日志文件的perl脚本。想法是将“有趣”的线条与其他线条进行分类。我的计划是: -制作日志文件的临时副本(因为它是不断写入的) -搜索“有趣”的行(关键字) -将它们复制到另一个文件“log.processed”中 -把那个文件通过电子邮件发给我。(我认为这部分将由cron完成)

直到现在我有了这个:

#!/usr/bin/perl
#use strict;
use warnings;
use File::Copy;

copy("/home/hq-asa.log","/home/hq-asa.temp") or die "Copy failed $!";
$NewLog     = "/home/hq-asa.processed";
our $search = "keyword1|keyword2|";
my $TempLog = "/home/hq-asa.temp";

open (my $LogFile, "+<", $TempLog) or die "Could not open log temp file $!";
qx(touch $NewLog);
open ($newlog, "+<", $NewLog) or die "could not open new log file $!";
foreach $line (<$LogFile>) {
    if (($line =~ m/$search/) or ($line eq $search))  {
        print $newlog $line;
    }
}
close($LogFile);
close($newlog);
unlink "/home/hq-asa.temp";
#/usr/bin/perl
#严格使用;
使用警告;
使用文件::复制;
复制(“/home/hq asa.log”、“/home/hq asa.temp”)或死“复制失败$!”;
$NewLog=“/home/hq asa.processed”;
我们的$search=“关键字1 |关键字2 |”;
my$TempLog=“/home/hq asa.temp”;

打开(我的$LogFile,"+ 写出一个包含停止位置的状态文件。如果要继续处理,请先读取状态文件并跳过行数。

写出一个包含停止位置的状态文件。如果要继续处理,请先读取状态文件并跳过行数。

用于获取所谓的“书签”(文件中的偏移量)并返回该位置

另外,使用书签保存inode编号(stat$file)[1]
)可能有助于确保文件没有被另一个文件替换(考虑使用
logrotate
旋转日志)。

用于获取所谓的“书签”(文件中的偏移量)并返回该位置


使用书签保存inode编号(stat$file)[1])可能有助于确保文件未被另一个文件替换(考虑使用
logrotate
旋转日志).

你为什么要注释掉
使用strict;
?我不想让你失去一些乐趣和学习,但Logwatch做的正是你所描述的:因为我收到了错误和警告,因为并非所有变量都定义为“我的”或“我们的”。它仅用于测试目的。我将在脚本运行后取消注释该行。@ManeaDragosh不,不,不,您是反向操作的。
使用strict
有助于使脚本正常工作,而不是相反,无论这种方式有多奇怪?(对已经“正常工作”的脚本使用strict?)如果你这样做是为了学习,请意识到注释out use strict是一个错误。除了简单的一行代码,或者可怕的复杂遗留代码(可能),您应该始终使用strict。为什么要注释掉
使用strict;
?我不想让您失去一些乐趣和学习,但Logwatch正是按照您所描述的做的:因为我收到了错误和警告,因为并非所有变量都定义为“我的”或“我们的”。它仅用于测试目的。我将在脚本运行后取消注释该行。@ManeaDragosh不,不,不,您是反向操作的。
使用strict
有助于使脚本正常工作,而不是相反,无论这种方式有多奇怪?(对已经“正常工作”的脚本使用strict?)如果你这样做是为了学习,请意识到注释out use strict是一个错误。除了简单的一行代码,或者可怕的复杂遗留代码(可能),你应该总是使用严格的。好的,这听起来是个好主意。但是我怎么知道我在哪里停了?我怎么找到最后一个行号?我的答案中有一个超链接。一定要遵循它。好的,这听起来是个好主意。但是我怎么知道我在哪里停了?我怎么找到最后一个行号?我的答案中有一个超链接。一定要遵循它。