我有一个Perl脚本,可以生成两个不同的数据流。
我需要将它们记录到两个单独的日志文件中。
我知道有两种方法导致不同的日志文件,但在我的情况下似乎没有一种方法有用:
使用类别(Perl模块名称)。
在我的例子中,流都是用相同的代码生成的(" main"包,但那是无关紧要的,重要的是字面上我的代码行彼此相邻到2个不能分成不同Perl模块的位置。
使用不同的日志级别。
但是,两者都应该以相同的优先级记录(例如,两者都正在记录info()
次呼叫和error()
,因此我无法使用logging WARN/ERROR to different files的常见问题解答配方。
答案 0 :(得分:3)
Categories是任意的,并且与应用程序的类层次结构无关。
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