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.
DBI
DBD::mysql
Log::Dispatch
Log::Log4perl
Mail::Sender
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')