YiiのCLogRouteを改良する


Yiiのログは不正終了時に出力されない。

メッセージルーティングはリクエストサイクルの最後でonEndRequest イベントが発生したときに 実行されます。 明示的に現在のリクエストの実行を終了するためには、die() や exit()ではなく、CApplication::end()を読んでください。 なぜなら、CApplication::end()はonEndRequestを発生させ、メッセージが適切にログに記録されるからです。
(http://www.yiiframework.com/doc/guide/1.1/ja/topics.logging)

Yiiの開発コミュニティはこの実装が問題だと思わないのだろうか?
ブラウザからリクエストを中断された場合にはログが保存されないのだけど。

onEndRequestにはprocessLogs()が登録されているので、不正終了時にも同じ事をするようにすれば良い。

例えば、ファイル出力するCFileLogRouteなら、適当なクラスで継承してメソッドをデストラクタを追加して、LogRouteの設定でCFileLogRouteの代わりに指定する。

  1. <?php
  2. class FFileLogRoute extends CFileLogRoute
  3. {
  4.     public function __destruct()
  5.     {
  6.         $this->processLogs($this->logs);
  7.     }
  8. }
  9. ?>

これで、exitで終了しようがブラウザが落ちようが、ログが出力される、

No Comments.

Leave a Reply

(required)

(required)