Amon2のロギングにLog::Handlerを使う

Amon2のロギングにLog::Handlerを使う

Amon2でログを取るにはLog::Minimalが推奨されている。

Log::Minimalが推奨されているけどファイルに書き出すのにコード書く必要があるっぽいので別のモジュールを探す。

Awesome PerlにLog::Minimalの他にはLog::DispatchとLog::Log4perlが掲載されている。ベンチマークのエントリーではCPAN本おすすめのLog::Handlerが良さそうだったので、試しに実装してみる。

Log::Handlerの特徴

Log::Handler

  • コンソールへのログ出力
  • 複数ファイルへのログ出力を設定可

他、DBIと絡めたり、メール送ったり、SOCKETで別サーバに送ったりも出来る。

Log::Handler::Examples - Examplesを読むと色々参考になる。

仕様

  • $ENV{'PLACK_ENV'}がdevelopmentかproductionかで切り分けて、開発時にはscreen(ターミナルへ出力)とdebugログ(ファイル)にも出力させるようにしておく。
  • $cにmethod生やしておいて、$c->log->info()で呼べる。debugだけは$c->debug()でも呼べるようにエイリアス化しておく。
  • ログファイルはとりあえずdebug.log、common.log、error.logとし、Myapp/var/log以下に保存する。
  • ロギングの設定は各モードで共有としておく。
  • warnまたはdieの時にはsignalを受け取ってログを吐くようにしておく。

該当コミット

https://github.com/clicktx/p5-App-Amozon/commit/aef903bb123094f9fd3a67a4be5f5a8d7cfd451d

使う

package Amozon::Web::C::Root;
use strict;
use warnings;
use utf8;

sub index {
    my ($class, $c) = @_;

    # debug
    $c->log->debug("debug message");
    $c->debug("debug message(alias)");

    # info
    $c->log->info("info message");

    # dump
    $c->log->dump($c);

    my $counter = $c->session->get('counter') || 0;
    $counter++;
    $c->session->set('counter' => $counter);
    return $c->render('index.tx', {
        counter => $counter,
    });
}