Log4Perl でファイルとメールにログを残す

log4perl でファイルにログを残すのと、任意のレベル以上のエラーが発生した場合はメールを送信するように設定する。

簡易な設定ファイルの内容

log4perl.rootLogger = DEBUG, LogAppender, MAILER

log4perl.appender.LogAppender          = Log::Log4perl::Appender::File
log4perl.appender.LogAppender.filename = /this/is/a/log4perl/setting/file/path.conf
log4perl.appender.LogAppender.mode     = append
log4perl.appender.LogAppender.layout   = Log::Log4perl::Layout::PatternLayout
log4perl.appender.LogAppender.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %F(%L) %M [%p] %m %n

log4perl.appender.MAILER.Threshold = FATAL
log4perl.appender.MAILER           = Log::Dispatch::Email::MailSend
log4perl.appender.MAILER.to        = reciever@example.com
log4perl.appender.MAILER.from      = sender@example.com
log4perl.appender.MAILER.subject   = [FATAL] This is a test mail.
log4perl.appender.MAILER.layout    = Log::Log4perl::Layout::PatternLayout
log4perl.appender.MAILER.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %F(%L) %M [%p] %m %n

「log4perl.rootLogger = DEBUG, LogAppender, MAILER」に記述している LogAppender はログをファイルに出力するための ID 名で、MAILER はログをメールで送信するための ID 名。
メールでログのエラーレベルを設定しているのは、「log4perl.appender.MAILER.Threshold」。

perl の記述例

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Log::Log4perl;

Log::Log4perl->init('/this/is/a/log4perl/setting/file/path.conf');
my $logger = Log::Log4perl->get_logger();
$logger->fatal('This is a test message as fatal error.');

依存するモジュール

明記されていなかったが、実行時に下記のモジュールが必要だというエラーが出た。

FreeBSD での ports 名は p5-Mail-Tools。

実際に送信されるメールの内容

下記のようなメールが送られる。

From: sender@example.com
To:   reciever@example.com
日付: 2010年2月19日12:54
件名: [FATAL] This is a test mail.

2010-02-19 12:54:46 ./log.pl(10) main:: [FATAL] This is a test message as fatal error.