Rod*_*rik 4 php hosting exception-handling symfony
我们正在生产几个symfony2网站,我们正在使用Airbrake和Sentry来收集异常.真正的异常即使在生产中也能很好地工作,我们可以用很多上下文记录它们,我们可以向用户显示一个不错的500错误页面.
PHP错误是另一回事.我可以使用"on shutdown"处理程序将它们记录到Sentry,但是使用它我不能传递很多上下文.对于用户,也只有空503错误.这很糟糕,因为如果出现问题,我们无法向用户显示"下一步".
来自Java背景我很喜欢"真正的"异常,并且在开发模式中有一个类可以在异常中转换大量错误,但是没有记录或显而易见的方法在生产中启用它,所以我想也许我不应该'在询问更多之前;)
你是如何处理这个问题的,它会带来什么样的性能损失?
这是一个来自以下网址的链接:http://groups.google.com/group/symfony2/browse_thread/thread/6129f57a35d8cb90?hl = zh-CN
PHP的启用方式:
错误(bootstrap!):
set_error_handler('errorToException');
function errorToException($code, $message, $file = null, $line = 0) {
if (error_reporting() == 0) {
return true;
}
throw new \ErrorException($message, $code, $file, $line);
}
Run Code Online (Sandbox Code Playgroud)异常(ExceptionHandler类):
set_exception_handler(array($this, 'exception'));
public function exception(\Exception $e) {
$this->logger->log($e);
}
Run Code Online (Sandbox Code Playgroud)致命错误(ExceptionHandler类):
register_shutdown_function(array($this, 'shutdown'));
public function shutdown() {
$error = error_get_last();
if (isset($error)) {
$this->exception(new \FatalException($error['message'], $error['type'], $error['file'], $error['line']));
}
}
Run Code Online (Sandbox Code Playgroud)这是-PHP-way™.您的所有"Symfony2™"ErrorHandling应保持不变.