}
$class->setup_finalize;
- # Should be the last thing we do so that user things hooking
- # setup_finalize can log..
- $class->log->_flush() if $class->log->can('_flush');
+
+ # Turn autoflush back off once setup is finished.
+ # TODO: this is being done purely for Static::Simple (legacy API), and has been suggested by
+ # mst to be removed and require/update Static::Simple to set this flag itself
+ $class->log->autoflush(undef) if ($class->log->can('autoflush'));
+
return $class || 1; # Just in case someone named their Application 0...
}
unless ( $class->log ) {
$class->log( Catalyst::Log->new(keys %levels) );
}
+
+ # Turn on autoflush by default:
+ $class->log->autoflush(1) if ($class->log->can('autoflush'));
if ( $levels{debug} ) {
Class::MOP::get_metaclass_by_name($class)->add_method('debug' => sub { 1 });
has level => (is => 'rw');
has _body => (is => 'rw');
has abort => (is => 'rw');
+has autoflush => (is => 'rw');
has _psgi_logger => (is => 'rw', predicate => '_has_psgi_logger', clearer => '_clear_psgi_logger');
has _psgi_errors => (is => 'rw', predicate => '_has_psgi_errors', clearer => '_clear_psgi_errors');
my $self = shift;
my $level = shift;
my $message = join( "\n", @_ );
+ my $ret;
if ($self->can('_has_psgi_logger') and $self->_has_psgi_logger) {
- $self->_psgi_logger->({
+ $ret = $self->_psgi_logger->({
level => $level,
message => $message,
});
$message .= "\n" unless $message =~ /\n$/;
my $body = $self->_body;
$body .= sprintf( "[%s] %s", $level, $message );
- $self->_body($body);
+ $ret = $self->_body($body);
}
+ if( $self->autoflush && !$self->abort ) {
+ $self->_flush;
+ }
+ return $ret;
}
sub _flush {
$c->log->abort(1) if $c->log->can('abort');
+=head2 autoflush
+
+When enabled, messages are written to the log immediately instead of queued
+until the end of the request. By default, autoflush is enabled during setup,
+but turned back off thereafter. This is done purely for legacy support,
+specifically for L<Catalyst::Plugin::Static::Simple>, and may be changed in
+the future.
+
=head2 _send_to_log
$log->_send_to_log( @messages );