NAME

Log::Log4perl::Appender::Screen - Log to STDOUT/STDERR

SYNOPSIS

use Log::Log4perl::Appender::Screen;

my $app = Log::Log4perl::Appender::Screen->new(
  autoflush => 1,
  stderr    => 0,
  utf8      => 1,
);

$file->log(message => "Log me\n");

DESCRIPTION

This is a simple appender for writing to STDOUT or STDERR.

The constructor new() takes an optional parameter stderr:

  • If set to a false value, it will log all levels to STDOUT (or, more accurately, whichever file handle is selected via select(), STDOUT by default).

  • If set to a hash, then any log4p_level with a truthy value will dynamically use STDERR, or STDOUT otherwise.

  • Otherwise, if a true value (the default setting is 1), messages will be logged to STDERR.

# All messages/levels to STDERR
my $app = Log::Log4perl::Appender::Screen->new(
    stderr  => 1,
);

# Only ERROR and FATAL to STDERR (case-sensitive)
my $app = Log::Log4perl::Appender::Screen->new(
    stderr  => { ERROR => 1, FATAL => 1},
);

Design and implementation of this module has been greatly inspired by Dave Rolsky's Log::Dispatch appender framework.

To enable printing wide utf8 characters, set the utf8 option to a true value:

my $app = Log::Log4perl::Appender::Screen->new(
  stderr    => 1,
  utf8      => 1,
);

This will issue the necessary binmode command to the selected output channel (stderr/stdout).

To enable autoflush, set the autoflush option to a true value:

my $app = Log::Log4perl::Appender::Screen->new(
  autoflush => 1,
);

This will issue the necessary autoflush command to the selected output channel (stderr/stdout).

This is required in containers, especially when the log volume is low, to not buffer the log messages and cause a significant delay.

LICENSE

Copyright 2002-2026 by Mike Schilli <m@perlmeister.com> and Kevin Goess <cpan@goess.org>.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.