Log::Log4perl

ログファイル出力スキームを提供する

use Log::Log4perl;
パッケージをロードする。

== 設定ファイルの書式 ==

log4perl.logger=<LEVEL>,<appenderID>,…
log4perl.logger.<module>=<LEVEL>,<appenderID>,…
log4perl.appender.<appenderID>=<appender module>
log4perl.appender.<appenderID>.layout=[SimpleLayout | PatternLayout]
log4perl.appender.A1.layout.ConversionPattern=<pattern>

== Appender Module ==

Log::Log4perl::Apender::Screen:コンソールに出力する
下記のオプション設定が可能
log4perl.appender.<appender ID>.stderr = 0 | 1 # 0=STDOUT,1=STDERR

Log::Log4perl::Appender::File:ファイルに出力する
下記のオプション設定が可能
log4perl.appender.<appender ID>.filename = <ログファイル名>
log4perl.appender.<appender ID>.mode = append | clobber | pipe # デフォルトはappend
log4perl.appender.<appender ID>.umask = mask permission # デフォルトは0222
log4perl.appender.<appender ID>.owner = <ファイル所有者>
log4perl.appender.<appender ID>.group = <ファイル所有グループ>
log4perl.appender.<appender ID>.utf8 = 0|1

Log::Dispatch::Email::MailSend:メールを送信する
下記のオプション設定が可能
log4perl.appender.<appender ID>.subject = <メールタイトル>
log4perl.appender.<appender ID>.to = <送信先アドレス>
log4perl.appender.<appender ID>.from = <送信元アドレス>

Log::Dispatch::FileRotate:ローテートファイルに出力する
下記のオプション設定が可能
log4perl.appender.<appender ID>.size = <ログファイルサイズ> # このサイズを超えるとローテートされる
log4perl.appender.<appender ID>.max = <ログファイル世代数>
log4perl.appender.<appender ID>.filename = <ログファイル名>
log4perl.appender.<appender ID>.mode = write | append

Log::Dispatch::Syslog:syslogに出力する
下記のオプション設定が可能
log4perl.appender.<appender ID>.facility = auth | cron | daemon | syslog | user | etc..
log4perl.appender.<appender ID>.ident = <syslogに記録する識別子>

== Module Method ==

Log::Log4perl->init($conf_filename);
設定ファイルを読み込む
インラインで書かれたconfigurationを読み込むこともできる。
my $l4p = q (
   log4perl.logger.mail=ALL,mail
   log4perl.appender.mail=Log::Dispatch::Syslog
   log4perl.appender.mail.layout=SimpleLayout
   log4perl.appender.mail.facility=user
);
Log::Log4perl->init(\$l4p);

my $logger = Log::Log4perl->get_logger($module);
$moduleに対するインスタンスを生成する。$moduleは、設定ファイルのlog4perl.logger.<module>に指定したモジュール名。存在しなければ、log4perl.rootLoggerの設定が使われる。

ログを出力する
$logger->trace("..."); # Log a trace message
$logger->debug("..."); # Log a debug message
$logger->info("..."); # Log a info message
$logger->warn("..."); # Log a warn message
$logger->error("..."); # Log a error message
$logger->fatal("..."); # Log a fatal message

mainパッケージでuse openプラグマを使用してもLog4perlの出力には影響が及ばないので、文字セット変換が必要な場合は、事前に変換しなければならない。

ログレベルを調べる
$logger->is_trace() # True if trace messages would go through
$logger->is_debug() # True if debug messages would go through
$logger->is_info() # True if info messages would go through
$logger->is_warn() # True if warn messages would go through
$logger->is_error() # True if error messages would go through
$logger->is_fatal() # True if fatal messages would go through

die,carpなどと併用する
$logger->logwarn("..."); # $logger->warn() && warn()
$logger->logdie("..."); # $logger->fatal() && die()
$logger->error_warn("..."); # $logger->error() && warn()
$logger->error_die("..."); # $logger->error() && die()
$logger->logcarp("..."); # $logger->warn() && carp()
$logger->logcluck("..."); # $logger->warn() && cluck()
$logger->logcroak("..."); # $logger->fatal() && croak()
$logger->logconfess("..."); # $logger->fatal() && confess()