cakephp 2如何压制或捕获丢失的控制器异常

时间:2016-06-06 09:38:51

标签: cakephp cakephp-2.0 newrelic

每当有人试图访问我的cakephp应用程序上的一个不存在的url时,我会得到一个丢失的控制器异常,如下所示:

MissingControllerException: Uncaught exception 'MissingControllerException' with message 'Controller class AutodiscoverController could not be found.' in /app/Vendor/cakephp/cakephp/lib/Cake/Routing/Dispatcher.php:161

我想这应该是,但它会造成New Relic的问题。这是我们的监控应用程序,它将始终注册这些异常并通知每个人该应用程序存在问题。

有没有办法捕获异常或抑制它,以便New Relic不注册它?

2 个答案:

答案 0 :(得分:2)

这就是我最终解决问题的方法:

我安装了新文物的PHP代理:sudo apt-get install newrelic-php5

然后我为我的应用程序配置了ExceptionHandler。在core.php中: Configure::write('Exception.handler', 'AppExceptionHandler::handleException');

在bootstrap.php中: App::uses('AppExceptionHandler', 'Lib');

处理程序位于app/Lib/AppExceptionHandler.php,它看起来像这样:

<?php
class AppExceptionHandler extends ErrorHandler{
    public static function handleException($error) {
        if(get_class($error) == 'MissingControllerException') {
            if (extension_loaded('newrelic')) {
                newrelic_ignore_transaction();
            }
        }
        parent::handleException($error);
    }
}

处理程序过滤掉所有异常,如果遇到MissingControllerException,它会使用New Relic PHP Agent忽略当前事务。在过滤之后,蛋糕的ErrorHandler正常处理了handleException()方法。

答案 1 :(得分:1)

是的,您可以在App控制器中管理它 - &gt; beforeFilter函数

if($this->name == 'CakeError'){
// Perform any action in error
}