simple (or at least documented) method
No, but tying the Test::Builder file handles does the trick:
package Test::More::Log4perl;
use Log::Log4perl qw(:easy);
sub TIEHANDLE { my $foo; bless \$foo, shift }
sub OPEN { @_ }
sub PRINT {
my $foo = shift;
my $logger = get_logger("Test::More");
$logger->error(@_);
}
sub PRINTF {
shift;
my $fmt = shift;
my $logger = get_logger("Test::More");
$logger->error(sprintf $fmt, @_);
}
# ...probably more methods needed
BEGIN {
my $conf = q(
log4perl.category.Test.More = WARN, Logfile
log4perl.appender.Logfile = Log::Log4perl::Appender::
+File
log4perl.appender.Logfile.filename = 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);
}
package Test::Builder;
BEGIN {
tie (*TESTERR,'Test::More::Log4perl') or die;
tie (*TESTOUT,'Test::More::Log4perl') or die;
}
package main;
use Test::More tests => 1;
ok(1);
test.log contains:
2008/01/29 15:32:51 foo.pl 8> 1..1
2008/01/29 15:32:51 foo.pl 8> ok 1
Note that the Test::Builder file handles are tied in a BEGIN block before pulling in Test::More.
That way the initialization messages of Test::More are also logged via log4perl.
Discerning STDOUT and STDERR (or TESTOUT and TESTERR) is left as an exercise to the reader ;-)
--shmem
_($_=" "x(1<<5)."?\n".q·/)Oo. G°\ /
/\_¯/(q /
---------------------------- \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
|