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 対策。まーつかわんのだけど。

これ、さっきヘルパーにした。

Catalyst-Helper-Log-Dispatch

これ使えば

./script/myapp_create.pl Log::Dispatch

すると Logger クラスとサンプルの yml ファイルを生成してくれる。

by typester / at 2007-04-14T07:01:00 / perl · catalyst / Comments(0)