2013/01/13

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::StamperLog::Stamper もまだ github にしかあげておらず、テストも十分ではないですが、一応、なんかそんなん書きましたとうことで。

サイト内検索