在Zend Framework中捕获并记录致命错误,警告和通知

时间:2010-08-04 09:06:50

标签: php zend-framework

目前我正在使用基本的错误控制器,如下所示:

class ErrorController extends My_MyController
{

    public function errorAction()
    {
        $errors = $this->_getParam('error_handler');

        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                // 404 error -- controller or action not found
                $this->getResponse()
                     ->setRawHeader('HTTP/1.1 404 Not Found');

                $this->view->headTitle('HTTP/1.1 404 Not Found');
                $this->view->message = 'HTTP/1.1 404 Not Found';

                break;
            default:
                // application error; display error page, but don't change
                // status code

                // Log the exception:
                $exception = $errors->exception;
                $log = new Zend_Log(
                    new Zend_Log_Writer_Stream(
                        BASE_PATH . '/logs/applicationException.log'
                    )
                );
                $log->debug($exception->getMessage() . "\n" .
                            $exception->getTraceAsString());

                $this->view->headTitle('HTTP/1.1 404 Not Found');
                $this->view->message = 'Application error';

                break;
        }

        $this->view->exception = $errors->exception;
    }
}

但是,这只会捕获并记录应用程序异常。它不会记录任何警告,通知和致命错误。

我也想记录这些。是否有推荐的方法在ErrorController中执行此操作?或者它应该在index.php中的ErrorController之外完成(因为Zend Framework ErrorHandler只处理没有路由,在动作控制器中缺少应用程序/操作异常和异常)?

1 个答案:

答案 0 :(得分:2)

通知和警告不是(或不应该)是应用程序致命的。致命错误就像他们在锡上说的那样,有时无法捕捉到。但是,如果你真的需要,或许可以考虑一下:

http://php.net/manual/en/function.set-error-handler.php