デバッグはログで

CakePHPのトレース出力が、あまりにもジャマなので、デバッグ環境を改造。SQLもHTTPパラメータもサーバログに出力するようにしました。

開発記?

CakePHPのJapanフォーラムに辿りついたところ、このブログが「開発記」に紹介されてました。恐縮しますが、正直、私はCakePHP礼賛派ではなくて(期待はしてるけど)、どっちかというと、ケーキの生クリーム剥いでスポンジだけ食ってる感じ。CakePHPユーザー(Bakerと呼ぶそうだ)にケンカ売ってるようなものですw。

今日もそんな内容になってしまいました。

画面デバッグは効率悪い

なぜPHP文化は、サーバログではなく、画面でデバッグしようとするんだろう。CakePHPには、$this->logが装備されてるのでなんぼかマシなんですが、それでも、画面への出力はユズれない!らしい。

 if( $a['a']||$a['b']||$a['c']
   ||$a['A']||$a['B']||$a['C']){
 }

こういうゆるゆるコードを許すクセに、実際書いてみると、正常に動いていてもこんな画面になる。



こりゃひどい。めっぽう疲れるばかりでなく、前回報告したようにJavaScriptがボロボロになってしまうから、

  app/config/core.php: define('DEBUG',0 )

としたいのですが、サーバログもろとも無反応になる。画面も、エラーは空ページになるだけ。さらに、DEBUG >= 2 じゃないと、UnitTestは走らないようにできている。

どうやら開発中は、define('DEBUG', 2 )は必須のようだ。
こりゃあ、もはや改造するしかない。

ログなんざファイルに出力されればいいのだ

という方針で改造。CakePHP 1.2.0.5427alphaです。

■トレースの画面表示を消す。

  • cake/libs/debugger.php
 handleError()
 line:158-192
  をごっそりコメントアウト。
  サーバログは欲しいので、CakeLog::writeは消さない。

■SQLも消す。ログに出力する。
  • cake/libs/model/datasources/dbo_source.php
 showLog()
 line:413-425
  をコメントアウト
  サーバログに出るようにするために、次のコードを追加する。

  foreach ($log as $k => $i) {
    CakeLog::write( LOG_DEBUG, "{$i['query']}" );
  }

■あとはHTTPログがほしい。

  • cake/dispatcher.php
 start()
 line:380 あたりに、次のように。

 $controller->log(
  "\r\n{$controller->params['controller']}".
   "/{$controller->params['action']}", LOG_DEBUG );
 $controller->log( "Parameters:", LOG_DEBUG );
 $controller->log( $controller->params, LOG_DEBUG );

■ログが改行しないとき

私はWindowsで開発してて、ログはTail for Windowsで見てます。
そういう場合。

  • cake/libs/cake_log.php
 write()
 line:92 最後の「\n」を「\r\n」に変更しました。
      出力フォーマット変えたい人も、ここをいじる。


以上、すごくサッパリしました。これで開発効率5割増し
たぶんそのくらい行くと思いますね。本気で。

開発記を辿ると。。。

MOONGIFTさんも素晴らしい情報提供してくださってますが、

  やはりRailsにしよう。
  CakePHPで余計なストレスを感じるのも何なので。

となってしまったようです。すごくわかるぅ~。
しかし、こちとら使い切らねばならぬ理由があるの。がんばろう。


コメント
匿名さん
2007/08/02
ありがとー、肩こりがなおる気がするヨ!これからも見にきます。
武田ソフト
2007/08/02
匿名さん、直るといいヨ!

コメントしてください
お名前:
入力しなければ「匿名さん」。20字以内。

メール:
入力しても表示しません

URL:
入力すればリンクが貼れます


コメント: