我正在构建一个监控解决方案,用于记录 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,如果电路的多个阶段有多个事件,我需要使用几个钩子吗?