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... |