我正在研究現有Perl代碼庫中的一項新功能,該功能將允許我們記錄正在發送到數據庫的命令。我將解決方案從Log4perl中解放出來,這使我不必重新創建幾個輪子。Log4perl日誌文件中的雙輸出
不幸的是,我遇到了一個麻煩:每條消息都會被髮送到日誌文件兩次。我希望它停止這樣做。
我的研究(Google)表示,將相同的消息發送到兩個不同的日誌文件是一個常見的問題,但這不是我所看到的。每條消息在單個日誌文件中出現兩次。
有沒有人有任何提示,我應該從哪裏開始尋找方法來糾正這種行爲?
編輯:配置文件看起來是這樣的:
my $log_packages = undef;
sub _get_logging_modifications {
# Hash that is keyed by a package name
# and the value is the level at which
# to log that package
return %{$log_packages} if defined $log_packages;
$log_packages = {};
my $log_info = $ENV{PROJECT_LOG_INFO} || '';
for my $log_specification (split(/,/, $log_info)) {
# Skip to the next log specification unless we have
# a well formed log spec. i.e., Package::Name/LOGLEVEL
next unless $log_specification =~ m!([^/]+)/([A-Z]+)!i;
my $package = $1;
my $log_level = $2;
$log_packages->{$package} = $log_level;
}
return %{$log_packages};
}
BEGIN {
my $layout = Log::Log4perl::Layout::PatternLayout->new(
'[%d] +%X{user_name}+ ||%X{request_uri}||%n ' .
'%C:%L - %P - %p - %n ' .
'%m%n'
);
my $web_data_path = $ENV{PROJECT_DATA_DIR}
|| File::Temp::tempdir(CLEANUP => 1);
my $logfile = "${web_data_path}/app.log";
my $log = Log::Log4perl->get_logger('');
my $app = Log::Log4perl::Appender->new(
"Log::Dispatch::File",
name => 'APP',
filename => $logfile,
);
$app->layout($layout);
$log->add_appender($app);
$log->level($WARN);
my %levels = (
FATAL => $FATAL,
ERROR => $ERROR,
WARN => $WARN,
INFO => $INFO,
DEBUG => $DEBUG,
);
my %mods = _get_logging_modifications();
for my $cat (keys %mods) {
my $level = uc($mods{$cat});
next unless exists($levels{$level});
my $other_log = Log::Log4perl->get_logger($cat);
$other_log->level($levels{$level});
}
# NEW BLAIRHIPPO CODE STARTS HERE
my $dbi_log = Log::Log4perl->get_logger('Project::NewLoggerThing');
my $dbi_layout = Log::Log4perl::Layout::PatternLayout->new('%m%n');
my $dbi_logfile = "/opt/home/blairhippo/test.log"; # FIXME: Make this configurable
my $dbi_app = Log::Log4perl::Appender->new(
"Log::Dispatch::File",
name => 'APP',
filename => $dbi_logfile,
);
$dbi_app->layout($dbi_layout);
$dbi_log->add_appender($dbi_app);
$dbi_log->level($DEBUG); # FIXME: Make this configurable
}
1;
我希望這是一個好的漂亮的.conf文件,但我與現有的代碼工作。
你能發佈你的代碼嗎? – CanSpice 2011-03-14 17:24:55
你可以發佈一些log4perl初始化代碼或配置來幫助調試嗎?這不是我用Log4perl看到的問題。 – justkt 2011-03-14 17:24:55
創建一個緊湊的測試用例,重現問題並在此處發佈。 – 2011-03-14 17:24:59