2

log4Perl 中是否有一种方法可以强制我的程序即使在 eval 子句之外也可以记录致命错误?我也想在任何未处理的程序终止的情况下调用 log4perl。最好我想在我的标准模块中添加相关的错误处理程序,该模块加载了我所有的 Perl 程序。
Perl 版本目前是 5.8,但我很快就会升级。
这是给定答案的测试代码。我在屏幕上既没有看到 DIE,也没有看到 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;
};
4

1 回答 1

4

看起来像常见问题解答 如何确保我的应用程序在意外死亡时记录一条消息?

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

于 2012-10-11T10:22:47.080 回答