在Perl中记录未捕获的异常

时间:2011-02-20 01:47:48

标签: perl exception-handling

我有一个Perl网络应用程序,并希望记录所有未捕获的异常(uneval'ed die's)。我的第一个想法是做这样的事情:

use Carp 'cluck';

sub main {
    my $logfile ="/some/path/logfile.txt";
    open STDERR, ">>$logfile";
    # main logic
    ...
}

sub eval_main {
   eval {
       main;
   };
   if ($@) {
       cluck $@;
       close STDERR;
       # redirect to "friendly error page"
       ....
   }
 }

 eval_main;

有没有比这更好的方法?

编辑:添加了重定向

1 个答案:

答案 0 :(得分:5)

只需使用$SIG{__DIE__}处理程序。见%SIG in perlvar

$SIG{__DIE__} = sub {
    open LOG, ">>my/error.log";
    print LOG @_;
    close LOG;
    print STDERR @_;
    exit 1;
};

sub main {
    ...
}

main();