The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Log::Log4perl::Appender - Log appender class

SYNOPSIS

  use Log::Log4perl;

      # Define a logger
  my $logger = Log::Log4perl->get_logger("abc.def.ghi");

      # Define a layout
  my $layout = Log::Log4perl::Layout::PatternLayout->new(
                   "%d (%F:%L)> %m");

      # Define an appender
  my $appender = Log::Log4perl::Appender->new(
                   "Log::Dispatch::Screen",
                   name => 'dumpy');

      # Set the appender's layout
  $appender->layout($layout);
  $logger->add_appender($appender);

DESCRIPTION

This class is a wrapper around the Log::Dispatch::* collection of dispatchers, so they can be used by Log::Log4perl. The module hides the idiosyncrasies of Log::Dispatch (e.g. every dispatcher gotta have a name, but there's no accessor to retrieve it) from Log::Log4perl and yet re-uses the extremely useful variety of dispatchers already created and tested in Log::Dispatch.

FUNCTIONS

Log::Dispatch::Appender->new($dispatcher_class_name, ...);

The constructor new() takes the name of the Log::Dispatcher class to be created as a string (!) argument, optionally followed by a number of Log::Dispatcher::Whatever-specific parameters, for example:

      # Define an appender
  my $appender = Log::Log4perl::Appender->new("Log::Dispatch::File"
                                              name => 'dumpy',
                                              file => 'out.log');

If no name parameter is specified, the appender object will create a unique one (format appNNN), which can be retrieved later via the name() method:

  print "The appender's name is ", $appender->name(), "\n";

Other parameters are specific to the Log::Dispatch module being used. In the case above, the file parameter specifies the name of the Log::Dispatch::File dispatcher used.

However, if you're using a Log::Dispatch::Email dispatcher to send you email, you'll have to specify from and to email addresses. Every dispatcher is different. Please check the Log::Dispatch::* documentation for the appender used for details on specific requirements.

The new() method will just pass these parameters on to a newly created Log::Dispatch::* object of the specified type.

When it comes to logging, the Log::Log4perl::Appender will transparently relay all messages to the Log::Dispatch::* object it carries in its womb.

$appender->layout($layout);

The layout() method sets the log layout used by the appender to the format specified by the Log::Log4perl::Layout::* object which is passed to it as a reference. Currently there's two layouts available:

    Log::Log4perl::Layout::SimpleLayout
    Log::Log4perl::Layout::PatternLayout

Please check the Log::Log4perl::Layout::SimpleLayout and Log::Log4perl::Layout::PatternLayout manual pages for details.

Supported Appenders

Here's the list of appender modules currently available via Log::Dispatch, if not noted otherwise, written by Dave Rolsky:

       Log::Dispatch::ApacheLog
       Log::Dispatch::DBI (by Tatsuhiko Miyagawa)
       Log::Dispatch::Email,
       Log::Dispatch::Email::MailSend,
       Log::Dispatch::Email::MailSendmail,
       Log::Dispatch::Email::MIMELite
       Log::Dispatch::File
       Log::Dispatch::Handle
       Log::Dispatch::Screen
       Log::Dispatch::Syslog
       Log::Dispatch::Tk (by Dominique Dumont)

Log4perl doesn't care which ones you use, they're all handled in the same way via the Log::Log4perl::Appender interface. Please check the well-written manual pages of the Log::Dispatch hierarchy on how to use each one of them.

Pitfalls

Since the Log::Dispatch::File appender truncates log files by default, and most of the time this is not what you want, we've instructed Log::Log4perl to change this behaviour by slipping it the mode => append parameter behind the scenes. So, effectively with Log::Log4perl 0.23, a configuration like

    log4j.category = INFO, FileAppndr
    log4j.appender.FileAppndr          = Log::Dispatch::File
    log4j.appender.FileAppndr.filename = test.log
    log4j.appender.FileAppndr.layout   = Log::Log4perl::Layout::SimpleLayout

will always append to an existing logfile test.log while if you specifically request clobbering like in

    log4j.category = INFO, FileAppndr
    log4j.appender.FileAppndr          = Log::Dispatch::File
    log4j.appender.FileAppndr.filename = test.log
    log4j.appender.FileAppndr.mode     = write
    log4j.appender.FileAppndr.layout   = Log::Log4perl::Layout::SimpleLayout

it will overwrite an existing log file test.log and start from scratch.

SEE ALSO

Log::Dispatch

AUTHOR

Mike Schilli, <log4perl@perlmeister.com>