2017-05-01 14 views
4

私は2つの異なるデータストリームを生成するPerlスクリプトを持っています。Log4perlで2つの異なるファイルにどのようにログすることができますか?

2つのログファイルにログを記録する必要があります。

は、私は別のログファイルにつながる2つのアプローチを認識してんだけどどちらも私の環境で役立つと思われる:(Perlのモジュール名です)

  1. 使用してカテゴリを。

    私の場合、ストリームは両方とも同じコード( "main"パッケージ)で生成されますが、重要ではありません。文字通り、2つの場所異なるPerlモジュールに分かれています)。

  2. 異なるログレベルを使用する。

    しかし、両方とも同じプライオリティでログに記録する必要があります(たとえば、両方ともinfo()コールを呼び出し、error()を適切に記録する)ので、logging WARN/ERROR to different filesのFAQレシピを使用することはできません。

+0

さらに、メッセージは、正規表現でカスタムフィルタを使用する限り動作しませんので、特定のパターンを持っていません私が見ることができるように。 – DVK

答えて

2

CategoriesはLog4perlであり、アプリケーションのクラス階層には関係しません。

use strict; 
use warnings; 

use Log::Log4perl qw(get_logger); 

my $conf = q(
log4perl.category.first = DEBUG, FileAppender1 
log4perl.category.second = DEBUG, FileAppender2 

log4perl.appender.FileAppender1   = Log::Log4perl::Appender::File 
log4perl.appender.FileAppender1.filename = first.log 
log4perl.appender.FileAppender1.layout = Log::Log4perl::Layout::SimpleLayout 

log4perl.appender.FileAppender2   = Log::Log4perl::Appender::File 
log4perl.appender.FileAppender2.filename = second.log 
log4perl.appender.FileAppender2.layout = Log::Log4perl::Layout::SimpleLayout 
); 

Log::Log4perl::init(\$conf); 

my $logger1 = get_logger('first'); 
my $logger2 = get_logger('second'); 

$logger1->debug('foo'); 
$logger2->info('bar'); 
$logger1->error('baz'); 

first.log

DEBUG - foo 
ERROR - baz 

second.log

INFO - bar 
関連する問題