我有一个 Perl 程序,其中我必须让一组消息进入屏幕(stdout),另一组进入文件。我为每个输出创建了两个记录器:首先是屏幕记录器,然后是文件记录器。当我创建并使用屏幕记录器时,屏幕上会出现消息。创建文件记录器后,使用屏幕记录器打印的消息不再出现在屏幕上。但是,当使用文件记录器时,文件中会出现消息。
记录器的 Log::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');
我已经通过代码跟踪,检查了返回值,但仍然没有发现问题可能是什么。关于问题可能由什么引起的建议(或此时的答案)将不胜感激。
提前致谢...
==================================================== =================
环境信息:我在 Windows 7 和 8 上使用 Perl v5.16.3。指令和包含如下:
#****************************************************************************;
# 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;