CakePHPで発行するSQLクエリーがどのログにも記録にも残らなくてデバッグしずらいのでプラグインに手を入れた

CakePHPを使っていてもっとも不満なのが、エラーメッセージから原因がよみとりにくいこと。まあそれ自体はまだ許せるにしても、問題はエラーの原因となる文字列などの副次情報すらまともに出力してくれないこと。たとえばデータベース関連のエラーなら、どういうクエリーを投げたのか程度の情報はログに出力してもいいはずだが、基本的にCakePHPが吐き出すクエリー文字列はAS修飾子などでゴテゴテにリネームされて長々としているので見づらい、という理由からなのかどうかは知らないけれど、app/tmp/logs/error.logを見ても「…」で下が省略されてしまうというお粗末なログともいえないログしか残っていない。これでみんなよく文句言わないな……。

ということで、これまたやりたくもないプラグインへの手入れ。
やることは簡単で、

[php]
$this->log($sql);
[/php]

という1行を、挿入するのみ。場所はfunction _execute($sql)というメソッドの開始行すぐ(まあreturn前ならどこでもいいとは思うけれど)。
私はMssql.phpプラグインを使っていたのでそこに挿入しているが、_execute()メソッドを持っていないプラグインは、親クラスの同じ名前のメソッドに仕掛けるしかないだろう。

ただしこれを入れると無条件に(たとえばプログラマが意図しない、CakePHPによって生成される冗長なSQLクエリーであっても)すべてのクエリーがログに吐き出されるので、運用ベースになったらコメントアウトするなどしたほうがいいだろう。

コメントを残す

メールアドレスが公開されることはありません。