PHPエラー、キャッチされない例外、およびユーザーがデータベーステーブルに記録したいその他のものを記録するための監視ソリューションを構築しています。商用の Zend Server の監視ソリューションに代わるものです。
Zend_Log を拡張し、前述のすべてのケースを処理できる Monitor クラスを作成しました。私の目的は、構成を 1 つの場所 (ブートストラップ) に減らすことです。現時点では、次のようにモニターを初期化しています。
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() メソッドは、DB への 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 をトリガーするイベントがわかりません。回路の複数の段階で複数のイベントがある場合、いくつかのフックを使用する必要がありますか?