我正在构建一个监视解决方案,用于记录PHP错误,未捕获的异常以及用户想要登录到数据库表的其他任何内容。 Zend Server中的监控解决方案的替代品。挂钩到错误处理周期
我已经写了一个扩展Zend_Log并可以处理所有提到的情况的Monitor类。 我的目标是将配置减少到一个地方,这将是Bootstrap。目前我正在初始化显示器这样的:
protected function _initMonitor()
{
$config = Zend_Registry::get('config');
$monitorDb = Zend_Db::factory($config->resources->db->adapter, $config->resources->db->params);
$monitor = new Survey_Monitor(new Zend_Log_Writer_Db($monitorDb, 'logEntries'), $config->projectName);
$monitor->registerErrorHandler()->logExceptions();
}
的registerErrorHandler()方法使PHP错误日志记录到数据库中,logExceptions()方法是一个扩展,只是设置一个保护标志。
在ErrorController errorAction我加入下面几行:
//use the monitor to log exceptions, if enabled
$monitor = Zend_Registry::get('monitor');
if (TRUE == $monitor->loggingExceptions)
{
$monitor->log($errors->exception);
}
我想避免添加代码到ErrorController不过,我宁愿动态注册一个插件。这将使用户更容易集成到现有项目中。
问题:我可以注册一个使用postDispatch挂钩的控制器插件并获得相同的效果吗?我不明白什么事件触发errorAction,如果在电路的多个阶段有多个事件,我是否需要使用多个钩子?
您可以在插件中存储异常,并检查存储的堆栈和响应堆栈是否相同。然后跳过处理。 – Xerkus 2011-03-20 19:03:45