log4perlのconfigファイル loggerに関して
Michael Schilli / Log-Log4perl - search.cpan.orgのconfigファイルに関してのメモ。
主にrootLoggerとかloggerの指定のところ。
設定ファイルを用意
# log4perl.rootlogger = DEBUG, A1 log4perl.rootLogger = DEBUG, A1 log4perl.appender.A1 = Log::Log4perl::Appender::Screen log4perl.appender.A1.layout = Log::Log4perl::Layout::SimpleLayout
先頭 # でコメント行
rootLoggerは小文字でも大丈夫だった。
これを「log4perl.conf」として保存。
テストスクリプトを用意
設定ファイルを読み込んでテストログを出力するスクリプトが以下。
#!/usr/bin/env perl use strict; use warnings; use Log::Log4perl; my $logger = do { Log::Log4perl->init('log4perl.conf'); Log::Log4perl->get_logger(); }; $logger->debug('debug'); $logger->info('info'); $logger->warn('warn');
DEBUG - debug
INFO - info
WARN - warn
loggerの追加とappender
log4perl.confに以下の1行を追加
log4perl.logger.hoge = WARN, A1
これで、get_loggerの引数に「hoge」を指定することでWARN出力になるとおもっていたが少し違った。
WARN - warn
WARN - warn
warn2個でた。
log4perlのappenderは指定した数だけログを吐く仕様っぽい。
つまり、もともとrootloggerでA1を指定していたところへ、hogeでさらにかぶせて指定したので2回はかれた。
解消するにはadditivity
2個出さないようにする、rootLoggerの設定を継承しないようにするにはloggerに対してadditivityの値を0に。
log4perl.logger.hoge = WARN, A1 log4perl.additivity.hoge = 0
get_loggerの引数はパッケージ形式で呼び出せる
例えばloggerを以下のようにセット
log4perl.rootLogger = INFO log4perl.logger.hoge.fuga = WARN, A1
「hoge.fuga」のルールをとってくるのに以下の2通りの方法がある。
Log::Log4perl->get_logger('hoge.fuga'); Log::Log4perl->get_logger('hoge::fuga');
上記のようにパッケージ形式での指定が可能。
特に意味ないけど
package hoge::fuga; Log::Log4perl->get_logger(__PACKAGE__);
とか