Catalyst で Log::Dispatch を使うの法
同僚から聞かれたので、僕のやり方を書いておく。
すでにCPANに Catalyst::Plugin::Log::Dispatch
というのがあるのだけど、なんかいけてないのでそれは使わず、以下のようにしている。
まず MyApp::Logger
とかいうのをかく
package MyApp::Logger;
use strict;
use warnings;
use Log::Dispatch::Config;
use Log::Dispatch::Configurator::YAML;
use Catalyst::Utils;
use NEXT;
{
package MyApp::Logger::Backend;
use base qw/Log::Dispatch::Config/;
}
sub setup {
my $c = shift;
my $class = ref $c || $c;
$c->log->_flush if $c->log->can('_flush');
my $config = $c->config->{log}{config}
|| $c->path_to( Catalyst::Utils::appprefix($class) . '_log.yml' );
MyApp::Logger::Backend->configure_and_watch(
Log::Dispatch::Configurator::YAML->new($config) );
$class->log( MyApp::Logger::Backend->instance );
$c->NEXT::setup(@_);
}
1;
んでこれをプラグインとしてロード。
use Catalyst qw/+MyApp::Logger/;
ログの設定ファイルを書く(デフォルトmyapp_log.yml)
---
dispatchers:
- file
- screen
file:
class: Log::Dispatch::File
min_level: debug
filename: /path/to/log
mode: append
format: '[%d] [%p] %m at %F line %L%n'
screen:
class: Log::Dispatch::Screen
min_level: debug
stderr: 1
format: '[%p] %m%n'
以上。
MyApp::Logger::Backend
とかしてるのは mod_perl 対策。まーつかわんのだけど。
これ、さっきヘルパーにした。
これ使えば
./script/myapp_create.pl Log::Dispatch
すると Logger クラスとサンプルの yml ファイルを生成してくれる。