Как я могу войти в два разных файла в Log4perl?
У меня есть Perl-скрипт, который производит два разных потока данных.
Мне нужно записать их в два отдельных файла журнала.
Мне известны 2 подхода, которые приводят к разным файлам журналов, но ни один из них не выглядит полезным в моей ситуации:
Использование категорий (которые являются именами модулей Perl).
В моем случае оба потока создаются в одном и том же коде ("основной" пакет), но это не имеет значения, важно то, что буквально у меня есть строки кода рядом друг с другом, которые ведут в 2 места, которые нельзя разделить на разные Perl модули).
Использование разных уровней.
Однако оба должны регистрироваться с одинаковым приоритетом (например, оба регистрируются
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