thinkphp日志分析

#!/usr/bin/perl -w
use strict;
use warnings;
use Tie::File;

####
#   Thinkphp日志分析
#       日志基本格式:{$now} ".$_SERVER['REQUEST_URI']." | {$level}: {$message}\r\n", $type,$destination,$extra
#   使用方法:
#

sub parse_log{
    my $file = shift;
    open my $fd , "<" , $file or die "open file error";
    my %hash ;  #字符串与访问次数哈希表
    
    while(<$fd>){
        #      2013-11-18  01:30:05+08:00    uri     info   tag-end  Runtime
        if( /\[ (\d{4}-\d{2}-\d{2})T(.+) \] (.+) \| (.+) \[ (.+) \]/ ){
            my $date = $1 ;
            my $time = $2 ;
            my $uri = $3 ;
            my $info = $4 ;
            my $runtime = $5 ;
            
            #下面解析 /APP/?s=Module/action 的情况
            if( $uri =~ /(\/.*\/\?s=\w+\/\w+)/ && $info eq "INFO: Tag[ view_end ] --END--" ){
                #print "origin:$_\n$info \t $uri\n" ;
                my $count = 1 ;
                my $date_key = "$date-$1" ; 
                if( exists $hash{$date_key} ){
                    $count = $hash{$date_key} + 1 ;
                }
                $hash{$date_key} = $count;
            }
        }
    }
    #排序输出结果
    #my @keys = sort { $hash{$b} <=> $hash{$a} or $b cmp $a } keys(%hash);
    my @keys = sort keys(%hash);
    my @vals = @hash{@keys};
    
    foreach my $key (@keys)
    {
        print "$hash{$key} \t $key\n";
    }
}

sub read_file{
    my $file = shift ;
    parse_log($file);
}

sub read_dir{
    my $log_home = "/data2/log/202-log/mobiapi/1.0" ;
    chdir $log_home or die "chdir error ?!" ;
    my @files = <*> ;
    for my $file (@files){
        read_file($file);
    }
}

sub main
{
    my $file = "/xxx/all.log" ;
    print "———————————————$file———————————————————\n";
    read_file($file);
}

main();

 

posted @ 2013-11-20 12:39  ifeixiang  阅读(2253)  评论(0编辑  收藏  举报