#!/usr/bin/perl -w
use strict;
use Time::ParseDate;
use Time::CTime;
use Compress::Zlib;
my $out_dir=$ENV{LOG_DIR};
my $cur_str='';
my $outlog;
my $line;
$SIG{TERM}= sub {
#handle apache closing by closing the .gz file properly;
if(defined $outlog){
$outlog->gzclose();
undef $outlog;
}
};
while (defined($line=<STDIN>)){
chomp $line;
if($line=~/\[(\d+)\/(\w+)\/(\d+)\:/){
#lines must contain an extractable date
my ($dd,$mm,$yy)=($1,$2,$3);
$dd=~s/^0//g;
my $str="$dd $mm $yy";
if($str ne $cur_str){
# new day, rotate to next file
$cur_str=$str;
my $dt=parsedate($str);
my $ts=strftime("%Y_%m_%d",localtime($dt));
$ts=~s/\s/0/g;
# close current log (If necessary)
$outlog->gzclose() if defined $outlog;
#find a unique name for the new log
my $ct=1;
my $fn="$out_dir$ts.0.gz";
while(-f $fn){
$fn="$out_dir$ts.$ct.gz";
$ct++;
}
$outlog=gzopen($fn,"a");
}
$outlog->gzwrite($line."\n");
}else{
# unrecognized line.... there should probably be some error chec
+king here
}
}
if(defined $outlog){
$outlog->gzclose();
}
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|