Как я могу войти в два разных файла в Log4perl?

У меня есть Perl-скрипт, который производит два разных потока данных.

Мне нужно записать их в два отдельных файла журнала.

Мне известны 2 подхода, которые приводят к разным файлам журналов, но ни один из них не выглядит полезным в моей ситуации:

  1. Использование категорий (которые являются именами модулей Perl).

    В моем случае оба потока создаются в одном и том же коде ("основной" пакет), но это не имеет значения, важно то, что буквально у меня есть строки кода рядом друг с другом, которые ведут в 2 места, которые нельзя разделить на разные Perl модули).

  2. Использование разных уровней.

    Однако оба должны регистрироваться с одинаковым приоритетом (например, оба регистрируются info() звонки и error() соответственно), поэтому я не могу использовать рецепт FAQ для записи WARN/ERROR в разные файлы.

1 ответ

Категории в 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
Другие вопросы по тегам