Log::Handlerで Stamped なログファイル書き出したくなったので書いてみた
これまで、自分は Log::Dispatch 使うことが多かったのですが、ちょっと思い立って Log::Handler 使ってみたくなって(速いらしいってのと、インターフェースがよさげだったので)、Log::Handler::Output::File::Stamper というサブクラスを書きました。ログファイル名に随時 yyyyMMdd とかを追加して書き出すためのものです。
my $log = Log::Handler->new;
$log->add(
'Log::Handler::Output::File::Stamper' => +{
filename => 'foo.log.%d{yyyyMMdd}'
}
);
$log->info('hoge');
コードはだいたい以下のモジュールからコピペして作りました。
主に Rolling の方を参考にしたのですが、よく見るとこのモジュールは、Log::Log4perl::DateFormat というモジュールひとつに依存するがために、そのディストリビューションである Log::Log4perl に依存する羽目になってて、自分はそれが嫌だったので、やっぱりコピペして Log::Stamper というモジュールをでっち上げました(命名的に Log4j どこいった感すごすぎますかね)。
use Log::Stamper;
my $stamp = Log::Stamper->new("yyyy-MM-dd");
my $time = time();
print $stamp->format($time); # 2013-01-13
Log::Handler::Output::File::Stamper も Log::Stamper もまだ github にしかあげておらず、テストも十分ではないですが、一応、なんかそんなん書きましたとうことで。