Catalystで任意のファイルにログを出力する。

Catalystのデフォルト log メソッドは、ログを標準出力に表示します。
でも通常は任意のファイルに出力したいですよね。の調査。


利用するCPANCatalyst::Log::Log4perl


・アプリケーションクラスに Catalyst::Log::Log4perl 設定を追加する

$ vi lib/MyApp.pm
use Catalyst qw/-Debug ConfigLoader Static::Simple/;
+use Catalyst::Log::Log4perl;

our $VERSION = '0.01';

(snip)

__PACKAGE__->config( name => 'MyApp' );

+# set logger
+__PACKAGE__->log(
Catalyst::Log::Log4perl->new("$FindBin::Bin/../conf/log4perl.conf") );
+
# Start the application
__PACKAGE__->setup;


ディレクトリ作成

$ cd MyApp
$ mkdir logs
$ mkdir conf


・log4perl用コンフィグファイル新規作成

$ vi conf/log4perl.conf
+log4perl.logger = DEBUG, A1
+log4perl.appender.A1 = Log::Log4perl::Appender::File
+log4perl.appender.A1.layout= Log::Log4perl::Layout::PatternLayout
+log4perl.appender.A1.layout.ConversionPattern = [%d] [catalyst] [%p] %m%n
+log4perl.appender.A1.filename = /who/am/i/MyApp/logs/myapp.log


・サーバー起動

$ cd MyApp
$ ./script/myapp_server.pl


・ログ出力を確認

$ more logs/myapp.log

ログが出力されていればOk。


参考サイト
http://d.hatena.ne.jp/ZIGOROu/20061105/1162736838