我有一個Perl程序,其中必須有一組消息轉到屏幕(標準輸出),另一組轉到文件。我爲每個輸出創建了兩個記錄器:屏幕記錄器,然後是文件記錄器。當我創建屏幕記錄器並使用它時,消息確實出現在屏幕上。創建文件記錄器後,使用屏幕記錄器打印的消息不再出現在屏幕上。但是,使用文件記錄器時,消息確實出現在文件中。是Log :: Log4Perl屏幕記錄器在創建文件記錄器後停止工作
的伐木工人日誌:: 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;
爲什麼2個獨立的記錄器對象?你是否總是希望向兩個地方傳遞相同的信息? – 2014-09-12 17:00:24
你的屏幕輸出進入stderr,而不是stdout。 – toolic 2014-09-12 17:24:36
有兩個記錄器的簡短答案是,其中一個是客戶想要通過不同記錄的程序進行記錄,而另外兩個客戶不想安裝模塊,比如稍後在程序流程中添加appender 。最簡單的答案就是客戶需要的是什麼。 – parramorej 2014-09-13 23:09:38