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();