我有一个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;
有没有比这更好的方法?
编辑:添加了重定向
答案 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();