user icon

CakePHP で debug.log にクエリを出力する(手抜き版)

シェル書いてる時とか Web でも Ajax のときとか

「画面にクエリだされても見えないし、困る〜」

ってときありますよね?

「つーか、なんで画面にだすんだ?ログファイルに出してくれればいいのに 」

とか思いません?

で、調べたらみなさんDBのドライバを拡張して対応されてるようです。
ですが、常にクエリをログに書いて欲しいわけでもないし、ドライバ拡張とか面倒。

クエリを画面にだしてるとこどうなってるのかなぁ、と思って調べたら

cake/libs/view/elements/sql_dump.ctp

にゴリゴリに書いてありました。

これマネしてapp_model.phpにでもメソッド作ればいいんじゃないかなーってことで、作りました。

    /**
     * 通常画面に表示されるログを取得してdebug.logに出力する。
     */
    function sqlToLog(){
        $db =& $this->getDataSource();
        if ($db->isInterfaceSupported('getLog')){
            $this->log($db->getLog(), LOG_DEBUG);
        }
    }

元のログ表示と違って明示的に呼び出すものなのでgetLogインターフェースの確認とか要らない気がしますが、一応。

このメソッドを実行すると debug.log にそれまでに実行されたクエリやら付帯情報(画面に表示されてますよね)が書き出されます。注意点として、画面に出すデータを横取りしているのでログに書き出されたものは画面には表示されません。

配列を print_r で出力した形式なので見やすくはないですが、まぁ、十分かな。

Facebooktwitterlinkedintumblrmail

タグ:

コメントは受け付けていません。