У меня есть программа Perl, в которой у меня должен быть один набор сообщений на экран (stdout), а другой набор - в файл. Я создаю два регистратора для каждого из этих выходов: сначала регистратор экрана, затем регистратор файлов. Когда я создаю регистратор экрана и использую его, на экране появляются сообщения. После создания регистратора файлов сообщения, напечатанные с помощью регистратора экрана, больше не отображаются на экране. Однако при использовании регистратора файлов в файле появляются сообщения.Log :: Log4Perl screen logger перестает работать после создания регистратора файлов
ТЕКУЩ :: Log4Perl конфигурации для лесорубов являются следующие:
# Screen configuration:
my $screen_conf = q(
log4perl.logger.MyPackage = DEBUG, Screen
log4perl.appender.Screen = Log::Log4perl::Appender::Screen
log4perl.appender.Screen.stderr = 1
log4perl.appender.Screen.mode = append
log4perl.appender.Screen.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.Screen.layout.ConversionPattern = %d %5p> %m%n
);
Log::Log4perl->init(\$screen_conf);
$screen_logger = Log::Log4perl::get_logger('MyPackage');
# Messages do appear on the screen:
$screen_logger->debug('Some more test text');
# File configuration:
my $file_conf = q(
log4perl.logger.MyPackage = DEBUG, LogFile
log4perl.appender.LogFile = Log::Log4perl::Appender::File
log4perl.appender.LogFile.filename = mylogfile.log
log4perl.appender.LOG.mode = append
log4perl.appender.LogFile.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.LogFile.layout.ConversionPattern = %d %5p> %m%n
);
Log::Log4perl->init(\$file_conf);
$sfile_logger = Log::Log4perl::get_logger('MyPackage');
# Messages do not appear on the screen now:
$screen_logger->debug('Some more test text');
# Messages do appear in the file:
$screen_logger->debug('Some more test text');
Я прослежена через код, проверенные возвращаемые значения, и до сих пор не нашли то, что может быть проблема. Предложения по поводу того, что проблема может быть вызвана (или ответом, на данном этапе), будут оценены.
Заранее спасибо ...
==================================== ========================================
Информация об окружающей среде: Я использую Perl v5.16.3 для Windows 7 и 8. Директивы и включает в себя следующие:
#****************************************************************************;
# Compiler directives
#****************************************************************************;
use strict;
use warnings;
use diagnostics;
#****************************************************************************;
# Module includes
#****************************************************************************;
use Data::Dumper;
use DBI;
use File::Basename qw(fileparse fileparse_set_fstype);
use File::Spec;
use Getopt::Long;
use Log::Log4perl;
use Readonly;
use Time::Piece;
use version;
Почему 2 отдельные объекты регистратора? Вы всегда хотите, чтобы одно и то же сообщение направлялось в оба места? –
Ваш экран выводится на stderr, а не на stdout. – toolic
Короткими ответами на то, что два регистратора - это то, что клиент хочет, чтобы сообщения через программу регистрировались по-разному, и, во-вторых, клиент не хочет устанавливать такие модули, как, например, для добавления добавок позже в потоке программы , Самый короткий ответ - это то, чего хочет клиент. – parramorej