!/usr/local/bin/perl -w use strict; $| = 1; use diagnostics; ###################################################################### ## This file is designed to reorder the log files for the corporate ## web server. These log files will be sequentially ordered for faster ## parsing. ###################################################################### my $existingLogFile; #the current file that we will parse my $newLogFile = "$existingLogFile"."_sorted"; #the log file that will be written my $logdirs = "/data/sortlogs/"; my @unique; my $counter = 0; my @timestamps; opendir (LOGDIR, $logdirs) or die "no $logdirs: $!"; while ($_ = readdir(LOGDIR)) { if ($_ =~ /^access/) { $existingLogFile = $_; } } open (EXFILE, "$existingLogFile") or die "Could not open $existingLogFile $!"; while () { if (/^\d/) { chomp; my $timeString; my $begOfLog; my $endOfString; ($begOfLog, $timeString, $endOfString) = split / [\[\]]/,$_; push (@timestamps, $timeString); } } close (EXFILE); @timestamps = sort (@timestamps); $unique[0] = $timestamps[0]; foreach my $stamp(@timestamps) { unless ($stamp eq $unique[$counter]) { push (@unique, $stamp); $counter++; } } foreach my $ts (@unique) { open (SORTEDFILE, ">>$newLogFile") or die "Could not open $newLogFile $!\n"; open (EXFILE, "+< $existingLogFile") or die "Cou ld not open $existingLogFile $!"; while () { my $entryStamp; my $before; my $after; ($before, $entryStamp, $after) = split /[\[\]]/,$_; my $strippedEntry = tell(EXFILE) opendir (LOGDIR, $logdirs) or die "no $logdirs: $!"; while ($_ = readdir(LOGDIR)) { if ($_ =~ /^access/) { $existingLogFile = $_; } } open (EXFILE, "$existingLogFile") or die "Could not open $existingLogFile $!"; $newLogFile = "$existingLogFile"."_sorted"; while () { if (/^\d/) { chomp; my $timeString; my $begOfLog; my $endOfString; ($begOfLog, $timeString, $endOfString) = split / [\[\]]/,$_; push (@timestamps, $timeString); } } close (EXFILE); @timestamps = sort (@timestamps); $unique[0] = $timestamps[0]; foreach my $stamp(@timestamps) { unless ($stamp eq $unique[$counter]) { push (@unique, $stamp); $counter++; } } foreach my $ts (@unique) { open (SORTEDFILE, ">>$newLogFile") or die "Could not open $newLogFile $!\n"; open (EXFILE, "+< $existingLogFile") or die "Could not open $existingLogFile $!"; while () { my $entryStamp; my $before; my $after; ($before, $entryStamp, $after) = split /[\[\]]/,$_; my $strippedEntry = tell(EXFILE); if ($ts eq $entryStamp) { print SORTEDFILE "$_"; } else { open (TEMPFILE, ">>/data/temp") or die "Couldn't open temp fil e $!\n"; print TEMPFILE "$_"; } } close (EXFILE); close (SORTEDFILE); close (TEMPFILE); rename ("/data/temp",$existingLogFile); }