我的perl应用程序目前有基本的日志记录。我正在使用Mod_perl和CGI
当脚本中发生错误时,用户会收到内部服务器错误页面。我知道CPAN CGI有一个错误报告功能,但这个功能似乎适用于单个脚本。我想要的是全局捕获堆栈跟踪,然后在网页上向用户报告。所以,当发生这种情况时,用户会得到一个不错的“出错的”页面,而不是一个无能的内部服务器错误页面。
答案 0 :(得分:0)
我通过创建bootstrap.pl脚本很好地处理了这个问题。我使用mod_rewrite将所有脚本重定向到bootstrap.pl并将实际url作为参数发布。在bootstrap中我处理会话,日志记录等,最后我调用eval('url'脚本)。最有趣的是错误处理:
use ex::override GLOBAL_die => sub {
my $stackTrace = Devel::StackTrace->new(no_refs => 1)->as_string;
if ($stackTrace =~ /eval \{/) {
CORE::die @_;
} else {
local *__ANON__ = "Exception";
select STDOUT;
print getError500( sprintf(
join("\n",<DATA>),
@_,
$stackTrace,
Dumper(\%ENV)
));
CORE::exit 1;
}
};
这是覆盖模具并在异常时打印漂亮的错误500页。我尝试了很多东西,这对我来说似乎是最好的方法。