[Catalyst] Catalyst::Log::Log4perl autoflush

David Wright dave-catalyst at dexy.org
Sat Apr 19 16:01:20 BST 2008


Hi,

It seems that 'autoflush' doesn't mean what it usually does in 
Catalyst::Log::Log4perl. It usually means that a write should happen 
immediately, and not be buffered.

That isn't the behaviour in Catalyst::Log::Log4perl, either when set 
using the log4perl conf, or when using the option to new(). The option 
to new() disables 'abort', which I think is a misunderstanding. The 
logging functions always simply push to the log4perlstack, which is only 
flushed after the request has been mostly handled.

In order to get autoflush working as expected, I have had to create a
derived class and override _log():

sub _log {
my $self = shift;
$self->SUPER::_log(@_);
$self->_flush if scalar(caller(1)) =~ /^MyApp(::|$)/;
}

perl -v: v5.8.8 built for i486-linux-gnu-thread-multi
uname -a: Linux PC-5023452 2.6.22-14-generic #1 SMP Fri Feb 1 04:59:50
UTC 2008 i686 GNU/Linux
Catalyst::Log::Log4perl version: 1.0

I've raised a bug in RT for this: 
http://rt.cpan.org/Public/Bug/Display.html?id=35221

Thanks,
David Wright



More information about the Catalyst mailing list