zoukankan      html  css  js  c++  java
  • 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;
     };

  • 相关阅读:
    Java中Class.forName()用法和newInstance()方法详解
    开发和学习中好用的工具
    ubuntu修改默认的apt源
    区块链共识算法总结(PBFT,Raft,PoW,PoS,DPoS,Ripple)
    比特币白皮书:一个点对点的电子现金系统(百度网盘)
    session和cookie的区别
    HTTP中GET,POST和PUT的区别
    三小时快速入门Python终结篇--其他模块导入
    C/C++ 多继承{虚基类,虚继承,构造顺序,析构顺序}
    C++ 实现vector<std:string> 版本
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351639.html
Copyright © 2011-2022 走看看