2017-05-01 18 views
4

我有一個Perl腳本,產生兩個不同的數據流。如何登錄Log4perl中的兩個不同文件?

我需要將它們記錄到兩個單獨的日誌文件中。

我所知,導致不同的日誌文件2點的方法,但沒有一個似乎在我的處境有所幫助:

  1. 使用類別(這是Perl的模塊名稱)。

    在我的情況下,這兩個流都生成在相同的代碼(「主要」包,但這是不相關的,重要的是,字面上我有代碼行相鄰記錄到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 
相關問題