#!/usr/bin/perl -wuse 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();