Log4perl Example

 

Overview

 

There is an excellent Log4perl tutorial at the following location.

 

http://www.perl.com/pub/a/2002/09/11/log4perl.html

 

The tutorial does not show how to create Log4perl Appenders that will log to a database or send an email message.  The example below shows how to accomplish these things.

 

Required Packages

 

DBI

DBD::mysql

Log::Dispatch

Log::Log4perl

Mail::Sender

 

Sample Files

 

The log4perl_test.pl file:

 

    ######### System initialization section ###

    use Log::Log4perl qw(get_logger :levels);

 

    Log::Log4perl->init("log4perl.conf");

   

    my $food_logger = get_logger("Groceries");

 

    ######### Run it ##########################

    my $food = Groceries::Food->new();

    my $food = Groceries::Food->new("Sushi");

    $food->consume();

   

    ######### Application section #############

    package Groceries::Food;

   

    use Log::Log4perl qw(get_logger);

       

    sub new {

        my($class, $what) = @_;

       

        my $logger = get_logger("Groceries::Food");

       

        if(defined $what) {

            $logger->debug("New food: $what");

            return bless { what => $what }, $class;

        }

   

        $logger->fatal("No food defined");

        return undef;

    }

   

    sub consume {

        my($self) = @_;

       

        my $logger = get_logger("Groceries::Food");

        $logger->info("Eating $self->{what}");

    }

 

The log4perl.conf file:

 

    log4perl.logger=FATAL, Email, Screen

    log4perl.logger.Groceries.Food=DEBUG, DB

 

    log4perl.appender.Screen=Log::Dispatch::Screen

    log4perl.appender.Screen.stderr=0

    log4perl.appender.Screen.Threshold=FATAL

    log4perl.appender.Screen.layout=Log::Log4perl::Layout::SimpleLayout

       

    log4perl.appender.Email=Log::Dispatch::Email::MailSender

    log4perl.appender.Email.smtp=smtp.bogus.com

    log4perl.appender.Email.subject=Log4Perl Test

    log4perl.appender.Email.to=recipient@bogus.com

    log4perl.appender.Email.from=test@bogus.com

    log4perl.appender.Email.Threshold=FATAL

    log4perl.appender.Email.layout=Log::Log4perl::Layout::SimpleLayout

   

    log4perl.appender.Log=Log::Dispatch::File

    log4perl.appender.Log.filename=test.log

    log4perl.appender.Log.mode=append

    log4perl.appender.Log.layout=Log::Log4perl::Layout::PatternLayout

    log4perl.appender.Log.layout.ConversionPattern=%d %p %M - %m%n

 

    log4perl.appender.DB            = Log::Log4perl::Appender::DBI

    log4perl.appender.DB.datasource = dbi:mysql:database=my_database;host=my_server

    log4perl.appender.DB.username   = sa

    log4perl.appender.DB.password   = s3cr3t

    log4perl.appender.DB.layout     = Log::Log4perl::Layout::PatternLayout

    log4perl.appender.DB.sql        = \

          INSERT INTO logtbl          \

             (log_timestamp, level, method, message) \

             VALUES ('%d','%p','%M','%m')