From: Mike S. <log...@pe...> - 2003-06-07 19:02:14
|
On Sat, 7 Jun 2003, James FitzGibbon wrote: > When v0.33 came out, I switched over my file-based loggers from > Log::Dispatch::File to Log::Log4perl::Appender::File. > ... > The problem is that Log::Log4perl::Appender::File always open the same > filehandle 'FH', so a logging configuration that has two instances of > the appender end up sending all messages to the file referenced by the > last instance to be created. Ouch. Thanks for reporting that. Here's a patch (I stole the 'local'-trick from Log::Dispatch::File), we should push a new release soon: Index: Changes =================================================================== RCS file: /cvsroot/log4perl/Log-Log4perl/Changes,v retrieving revision 1.127 diff -a -u -r1.127 Changes --- Changes 31 May 2003 18:18:54 -0000 1.127 +++ Changes 7 Jun 2003 18:55:22 -0000 @@ -2,8 +2,13 @@ Revision history for Log::Log4perl ################################################## +0.34 (not yet released) + * (ms) James FitzGibbon <jam...@ta...> noticed a major + bug in Log::Log4perl::Appender::File and sent a patch. Problem + was that it was reusing the same file handle for every opened file, + so all messages were ending up in the same file. -0.33 +0.33 05/30/2003 * (kg) CPAN rt#2636, coordinating XML::DOM version required across modules and unit tests * (ms) Removed Log::Dispatch dependency, added standard Index: lib/Log/Log4perl/Appender/File.pm =================================================================== RCS file: /cvsroot/log4perl/Log-Log4perl/lib/Log/Log4perl/Appender/File.pm,v retrieving revision 1.1 diff -a -u -r1.1 File.pm --- lib/Log/Log4perl/Appender/File.pm 29 May 2003 08:37:11 -0000 1.1 +++ lib/Log/Log4perl/Appender/File.pm 7 Jun 2003 18:55:22 -0000 @@ -26,10 +26,12 @@ $arrows = ">>"; } - open FH, "$arrows$self->{filename}" or + my $fh = do { local *FH; *FH; }; + + open $fh, "$arrows$self->{filename}" or die "Can't open $self->{filename} ($@)"; - $self->{fh} = \*FH; + $self->{fh} = $fh; bless $self, $class; } Index: t/026FileApp.t =================================================================== RCS file: /cvsroot/log4perl/Log-Log4perl/t/026FileApp.t,v retrieving revision 1.4 diff -a -u -r1.4 026FileApp.t --- t/026FileApp.t 31 May 2003 18:51:29 -0000 1.4 +++ t/026FileApp.t 7 Jun 2003 18:55:23 -0000 @@ -25,9 +25,9 @@ mkdir("$WORK_DIR", 0755) || die "can't create $WORK_DIR ($!)"; } -my $testfile = File::Spec->catfile(qw(t tmp test26.log)); +my $testfile = File::Spec->catfile($WORK_DIR, "test26.log"); -BEGIN {plan tests => 5} +BEGIN {plan tests => 6} END { unlink $testfile; unlink "${testfile}_1"; @@ -126,7 +126,7 @@ $log->info("Shu-wa-chi!"); for(qw(1 2)) { - open FILE, "<${testfile}_$_" or die "Cannot create ${testfile}_$_"; + open FILE, "<${testfile}_$_" or die "Cannot open ${testfile}_$_"; $content = join '', <FILE>; close FILE; @@ -137,4 +137,34 @@ # We don't have Log::Dispatch, skip these cases ok(1); ok(1); +} + +######################################################### +# Check if the 0.33 Log::Log4perl::Appender::File bug is +# fixed which caused all messages to end up in the same +# file. +######################################################### +$data = <<EOT; +log4perl.category = INFO, FileAppndr1, FileAppndr2 +log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File +log4perl.appender.FileAppndr1.filename = ${testfile}_1 +log4perl.appender.FileAppndr1.mode = append +log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout + +log4perl.appender.FileAppndr2 = Log::Log4perl::Appender::File +log4perl.appender.FileAppndr2.filename = ${testfile}_2 +log4perl.appender.FileAppndr2.mode = append +log4perl.appender.FileAppndr2.layout = Log::Log4perl::Layout::SimpleLayout +EOT + +Log::Log4perl::init(\$data); +$log = Log::Log4perl::get_logger(""); +$log->info("Shu-wa-chi!"); + +for(qw(1 2)) { + open FILE, "<${testfile}_$_" or die "Cannot open ${testfile}_$_"; + $content = join '', <FILE>; + close FILE; + + ok($content, "INFO - Shu-wa-chi!\n"); } -- Mike Mike Schilli log...@pe... http://perlmeister.com http://log4perl.sourceforge.net |