|
From: Mike S. <m...@pe...> - 2005-09-11 00:21:31
|
On Sat, 10 Sep 2005, Mike Schilli wrote:
> Alternatively, you could have the child change its appender file:
Or, you could even write your own file appender. This way, things like init_and_watch()
will still work:
######################
# FileTrunkappender.pm
######################
package FileTrunkAppender;
use base "Log::Log4perl::Appender::File";
sub new {
my($class, @options) = @_;
my $self = {
name => "unknown name",
umask => undef,
autoflush => 1,
mode => "append",
@options,
};
die "Mandatory parameter 'filename_trunk' missing" unless
exists $self->{filename_trunk};
bless $self, $class;
}
sub log {
my($self, @args) = @_;
if(! exists $self->{filename} or
! -f $self->{filename}) {
$self->{filename} = $self->{filename_trunk} . ".$$";
$self->file_open();
}
$self->SUPER::log(@args);
}
1;
######################
# test.pl
######################
use Log::Log4perl qw(:easy);
my $conf = q(
log4perl.category = DEBUG, Logfile
log4perl.appender.Logfile = FileTrunkAppender
log4perl.appender.Logfile.filename_trunk = test.log
log4perl.appender.Logfile.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.Logfile.layout.ConversionPattern = %d %F{1} %L> %m %n
);
Log::Log4perl->init(\$conf);
for(1..3) {
my $pid = fork();
die "Can't fork" unless defined $pid;
if($pid == 0) {
DEBUG "Child $$";
sleep (3);
exit;
}
}
print "parent\n";
wait() for (1..5);
print "Done.\n";
-- Mike
Mike Schilli
m...@pe...
|