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