http://qs321.pair.com?node_id=807394

chanakya has asked for the wisdom of the Perl Monks concerning the following question:

I've been using Log::Dispatch in one of the projects for logging. I wanted to add logrotation , so that the
application itself does the logrotation so I used Log::Dispatch::FileRotate to achieve the same.

Here is my setup :
* A perl scripts which executes in daemon mode.

Here is what I want to achieve:
* As the system date changes, the application should create a new log file based on the system date.

Currently my application is rotating file, but the date on the filename is not modified.

The application creates log file as app.YYYYMMDD.log . For example if I start the daemon script on 20091113 the log file is created as app.20091113.log, the issue is even after the system date changes, the date remains the same as 20091113 and doesn't change to 20091114.

Below is my present code. Please point me to the right direction on how to achieve the date based file rotation
#!/usr/bin/perl use strict; use warnings; use Log::Dispatch; use Log::Dispatch::FileRotate; use Date::Format; my @loc = localtime(); my $current_date = Date::Format::strftime("%Y%m%d", @loc); my $logfile = "app.".$current_date.".log"; our $HOSTNAME = `hostname`; chomp $HOSTNAME; my $log = new Log::Dispatch( callbacks => sub { my %h=@_; return $HOSTNAME." $0 \[$$]: ".$h{m +essage}."\n"; } ); $log->add( Log::Dispatch::FileRotate->new( name => 'file1', min_level => 'info', mode => 'append', filename => File::Spec->catfile( +$log_dir, $logfile), DatePattern => 'yyyy-mm-dd', ) ); $log->info("Starting Processing: ".localtime());
Thank you for your time.