use Data::Dumper::Simple; print "Welcome to Tomcat Access Log Parser\n"; $LogFile = "C:\\Documents and Settings\\snra\\Desktop\\localhost_access_log.txt"; my $http_code_200_count,$http_code_404_count,$unique_ip_count,$unique_ip_journal_mf; my @response_array = (); use vars qw/ $element_host $element_logname $element_date $element_method $element_url $element_code $element_size $element_referrer $element_agent /; my @field = (); @attriubtelib = ( 'host', 'logname', 'date', 'method', 'url', 'code', 'size', 'referrer', 'agent' ); $TomcatLogFormat = ''; # $PerlParsingFormat="([^ ]+) [^ ]+ ([^\\/\\[]+) \\[([^ ]+) [^ ]+\\] \\\"([^ ]+) (.+) [^\\\"]+\\\" ([\\d|-]+) ([\\d|-]+) \\\"(.*?)\\\" \\\"([^\\\"]*)\\\""; $TomcatLogFormat = "([^ ]+) [^ ]+ ([^\\/\\[]+) \\[([^ ]+) [^ ]+\\] \\\"([^ ]+) ([^ ]+)(?: [^\\\"]+|)\\\" ([\\d|-]+) ([\\d|-]+) \\\"(.*?)\\\" \\\"([^\\\"]*)\\\""; $element_host = 0; $element_logname = 1; $element_date = 2; $element_method = 3; $element_url = 4; $element_code = 5; $element_size = 6; $element_referrer = 7; $element_agent = 8; $TomcatLogFormat = qr/^$TomcatLogFormat/; open( LOG, "$LogFile" ) || die("Couldn't open tomcat access log file \"$LogFile\" : $!"); while ( $line = ) { my %single_response_map = (); chomp $line; $line =~ s/\r$//; if ( !( @field = map( /$TomcatLogFormat/, $line ) ) ) { print "Line did not match the format !!!! - $line "; } for ( $i = 0 ; $i < @field ; ++$i ) { $single_response_map{ $attriubtelib[$i] } = $field[$i]; } push @response_array,\%single_response_map; } print Dumper @response_array; #### { 'date' => '15/Dec/2010:12:36:21', 'referrer' => '-', 'size' => '1046', 'host' => '192.0.0.222', 'logname' => '-', 'agent' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)', 'url' => '/folder/File1/data1.txt', 'method' => 'GET', 'code' => '200' }