每当有人试图访问我的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不注册它?
答案 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
}