由于在另一个主题上回答不礼貌,我再次在这里提出与此主题相关的问题:
How to log ZF2 controller exceptions
有人说您可以用这种方式记录任何未捕获的异常,但是不是未捕获的异常退出了由PHP完成的Web服务器的进一步运行吗?我想知道这里有什么想法或尝试要做的事情。
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
/**
* Log any Uncaught Exceptions, including all Exceptions in the stack
*/
$sharedManager = $e->getApplication()->getEventManager()->getSharedManager();
$sm = $e->getApplication()->getServiceManager();
$sharedManager->attach('Zend\Mvc\Application', 'dispatch.error',
function($e) use ($sm) {
if ($e->getParam('exception')){
$ex = $e->getParam('exception');
do {
$sm->get('Logger')->crit(
sprintf(
"%s:%d %s (%d) [%s]\n",
$ex->getFile(),
$ex->getLine(),
$ex->getMessage(),
$ex->getCode(),
get_class($ex)
)
);
}
while($ex = $ex->getPrevious());
}
}
);
答案 0 :(得分:0)
是不是未捕获的异常退出了PHP完成的Web服务器的进一步运行
不,未捕获的异常只会在标准PHP设置下停止处理当前请求,无论是mod-php还是fpm或cgi。 Zend \ Mvc会在分发过程中捕获所有异常,并使它们可用于'dispatch.error'处理程序(您发布的代码就是这样的处理程序,用于记录异常和链中所有先前的异常)。因此,并不是没有真正的例外。