在log4Perl中有没有一种方法可以强制我的程序即使在eval子句之外也记录fatal?我想实现在任何未处理的程序终止的情况下调用log4perl。最好是在我的标准模块中添加相关的错误处理程序,该模块与我的所有Perl程序一起加载。
Perl版本目前是5.8,但我很快就会升级。
这是给定答案的测试代码。我在屏幕上既没有看到骰子,也没有创建die.txt。
use Log::Log4perl qw(get_logger);
$a->test();
$SIG{__DIE__} = sub {
warn "DIE";
open DIE,">die.txt";
print DIE "died\n";
close DIE;
};发布于 2012-10-11 18:22:47
看起来像是常见问题解答How can I make sure my application logs a message when it dies unexpectedly?
use Log::Log4perl qw(get_logger);
$SIG{__DIE__} = sub {
if($^S) {
# We're in an eval {} and don't want log
# this message but catch it later
return;
}
local $Log::Log4perl::caller_depth =
$Log::Log4perl::caller_depth + 1;
my $logger = get_logger("");
$logger->fatal(@_);
die @_; # Now terminate really
};有关更多信息,请参阅perlipc
https://stackoverflow.com/questions/12777789
复制相似问题