5

我有一个 Perl 脚本,它产生两个不同的数据流。

我需要将它们记录到两个单独的日志文件中。

我知道两种方法会导致不同的日志文件,但在我的情况下似乎都没有帮助:

  1. 使用类别(Perl 模块名称)。

    在我的情况下,流都是在相同的代码中生成的(“主”包,但这无关紧要,重要的是我有彼此相邻的代码行记录到不能分成不同 Perl 的 2 个位置模块)。

  2. 使用不同的日志级别。

    但是,两者都应该以相同的优先级记录(例如,两者都记录info()调用并error()视情况而定),因此我不能使用常见问题解答配方将WARN/ERROR 记录到不同的文件

4

1 回答 1

4

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');

第一个.log

DEBUG - foo
ERROR - baz

第二个日志

INFO - bar
于 2017-05-02T00:32:54.740 回答