perl增量分析日志

#!/usr/bin/perl
#取文件行数
##循环开始清空文件
use POSIX;
use CGI;
use DBI;
my $dbName = 'oadb';
my $dbUser = 'query';
my $dbUserPass = 'query';
my $dbh = DBI->connect("dbi:Oracle:$dbName", $dbUser, $dbUserPass) or die "can't connect to database " ;
my $dir  = '/usr/local/apache-tomcat-7.0.55_8081/logs';
my $file = 'catalina.out';
my $SDATE = strftime("%Y-%m-%d",localtime());
my $XDATE = strftime("%Y%m%d%H%M%S",localtime());
$mon_file = "$dir/$file";
if (-f "tmp.out"){
open FILE,">tmp.out";
close FILE;}

open( A, "<", "count.txt" );
            while (<A>) {
            $count = $_;
                        };
print "上次记录的记录数为$count
";


open(my $fh, '<', "$mon_file");
$. = 0;
while (<$fh>) {
    ($num=$.) if eof;
              };
print "文件最新的记录数为$num"."
";
    open( B, ">", "count.txt" );
    print B ("$num
");

if ( defined($count)  && $num != $count && $num !=0  )
{    print "开始处理
";
     open( C, "<", "$mon_file" ) || die "$!
";
       while (<C>) {
             if  ($. > "$count" ){ 
              open( D, ">>", "tmp.out" );
              print D ("$_");
             }
                  }
};
              close D;
##########监控关键字,以空格隔开################
@warn_arr = qw/ 登录失败 登陆失败 用户名或密码错误/;
foreach $a (@warn_arr)
{
                 $i   = 0;
                 $num = 0;
                   $b = 0;
               open( D, "<", "tmp.out" ) || die "$!
"; 
               while (<D>) 
                  {
                             $num++;
                             if ( ( $_ =~ /$a/i ) && ($_ =~ /ClientAuthRealm/i) ) 
                             {
                             $i++; $b = $num ;$c = $num -1;
                             print "$b is $b
";
                             print "$c is $c
";
                             open( E, "<", "tmp.out" ) || die "$!
";
                             while (<E>) {
                             if ( $. == "$c" ){ if ($_ =~ /.*username=(.*?)&password.*/){$USER=$1};};
                             if ( $. == "$b" ){ if ($_ =~/.*{("retCode.*?)}.*/){$err_mes=$1};
                                              if ($_ =~/(.*?),.*/){$date=$1;}
                                         }};
                             close E;
                            print "$USER is $USER
";
                            print "$err_mes is $err_mes
";
                            print "$date is $date
";
                              $dbh->do("INSERT INTO QUERY.ERR_INFO values('$USER','121.40.167.35',to_date('$SDATE','yyyy-mm-dd'),'$date||$err_mes',to_date('$XDATE','YYYYMMDDHH24MISS'))") or die($DBI::errstr);
                            
                            };
                   };
                            close D;
 };

原文地址:https://www.cnblogs.com/hzcya1995/p/13351639.html