Log4perl for file and email logging

I have recently started using log4perl for logging in Perl.  I have used log4j before and was hoping log4perl delivers in a similar fashion and it surely does. I have found it extremely powerful, especially with different logging levels, categories and appenders available. To write a simple logger, one can write a simple configuration file. For example, I have called this file log4perl.conf:

log4perl.logger=INFO, LOGFILE
log4perl.logger.Loggers.MailLogger=ERROR, Mailer

log4perl.appender.LOGFILE = Log::Log4perl::Appender::File
log4perl.appender.LOGFILE.filename = ../logs/plif.log
log4perl.appender.LOGFILE.mode=append
log4perl.appender.LOGFILE.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.LOGFILE.layout.ConversionPattern = %d{dd MMM yyyy HH:mm:ss} - [%p] Line %L - %m%n

log4perl.appender.Mailer = Log::Dispatch::Email::MailSender
log4perl.appender.Mailer.to = masud.khokhar@bodleian.ox.ac.uk
log4perl.appender.Mailer.from = Masud Khokhar masud.khokhar@gmail.com
log4perl.appender.Mailer.subject = Fatal Error!
log4perl.appender.Mailer.smtp = smtp.ox.ac.uk
log4perl.appender.Mailer.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.Mailer.layout.ConversionPattern = %d{dd MMM yyyy HH:mm:ss} - [%p] Line %L - %m%n
log4perl.appender.Mailer.buffer = 0

and initialise it in the code (I use Readonly but that’s not the important part here):

#### For logging
use Log::Log4perl;
use Log::Dispatch;

#### Global logger initialisations
Readonly::Scalar my $LOG_PATH => '../config/log4perl.conf';
Log::Log4perl->init($LOG_PATH);

#### Set up a file logger for logging
Readonly::Scalar my $FILE_LOGGER => Log::Log4perl->get_logger('logger');

#### Set up a mail logger
Readonly::Scalar my $MAIL_LOGGER =>  Log::Log4perl->get_logger('Loggers::MailLogger');

and then you can log to file by using

$FILE_LOGGER->info( 'Processing record:' . $row_ref->{record_id} );

and send an email by using

$MAIL_LOGGER->fatal( 'Error processing record:' . $row_ref->{record_id} );

Tip: If the mail part of your logging is not working, try installing Mail::Sender through CPAN or through other source (e.g. apt-cache search mail sender)

Share this:


Leave a Reply