SQLクエリーをログに出力する

SQLのクエリーをデバッグするには、Debug Kitを使用すればできますが、デバッグログと一緒に出したいのでやり方を調査してみました。
別々のログやビューでみるのもいいですが、秒単位で実行される処理もどちらが先に実行されたのかなどわかりやすくなるので、いいかなと個人的に思っています。

明示的に実行SQLをデバッグする

モデル操作(find, save, deleteなど)の後に以下のコードを挿入すると実行SQLを(デバッグ)ログに出力させることができます。

$this->log( $this->[Model]->getDataSource()->getLog(), LOG_DEBUG);

出力先は自由に設定して下さい。

暗黙的に実行SQLをデバッグする

DataSourcesをオーバーライドさせます。

MySQLの場合

1. MysqlLog.phpを作成(名前は自由に)

// \app\Model\Datasource\Database\MysqlLog.php
<?php
App::uses( 'Mysql', 'Model/Datasource/Database');
class MysqlLog extends Mysql {
    function logQuery( $sql, $params = array()) {
        parent::logQuery( $sql);
        if (Configure::read('Cake.logQuery')) {
            $this->log( $this->_queriesLog, LOG_DEBUG);  // SQLの実行詳細
//          $this->log( $sql, LOG_DEBUG);                // SQLクエリーのみ
        }
    }
}
?>

2. datasourceを変更

//  \app\Config\database.php
//      'datasource' => 'Database/Mysql',
        'datasource' => 'Database/MysqlLog',

3. 出力するフラグを設定
出力させるさせないを設定します。以下を追加すると出力されるようになります。

//  \app\Config\core.php
Configure::write( 'Cake.logQuery', 1);

上記を削除すれば、出力させなくできます。

参考

Vladimir Bilyov - Logging sql queries into file in CakePHP 2

  • このエントリーをはてなブックマークに追加

関連記事

Formヘルパーのinputタグのdiv/labelなどの設定

Formヘルパーのinputではデフォルトでは以下のようにdivで囲われて、labelが付与されて出力されます。 CSSのフレームワークなどであらかじめ決まったスタイルがある場合に便利に作られていま

CSS/JSをひとまとめにして軽量化するプラグイン「Minify plugin for CakePHP」

「Minify plugin for CakePHP」は、インクルードするCSSもしくはJSファイルをひとまとめにしてキャッシュ化してくれるプラグインです。 導入 ダウンロード・解凍し

CakePHP インストール時エラーの対処

CakePHPインストール時に出くわすであろうエラーの原因と対処方法についてまとめてみました。前提として、WebサーバはApache、データベースはMySQLとしています。 Timezone未設

Cookieログイン

今回は、ログイン画面でよくみかけるクッキーログインの機能を使ってみます。 CakePHPには、Cookieコンポーネントがあります。(PHPのsetcookieメソッドのラッパー)メソッドはwr

独自のバリデーションルールを作成

CakePHPで組み込みバリデーションルールをつくる方法は、正規表現を定義する方法と独自メソッドを定義する方法の2つがあるようです。 参考 Custom Validation Rules 正規

数値系バリデーション

CakePHP 2になっていくつか数値用バリデーションルールが追加されています。 数値用 (コア)バリデーション decimal - 十進数であること numeric - 数値であること

recursive設定によるfind()性能改善

CakePHPでは、モデルにアソシエーションを設定している場合、recursive(=>joinする階層)はデフォルトで0に設定されています。「recursiveゼロ」の意味するところとは、「1跨ぎま

複数ファイルアップロードフォーム

CakePHP 2.0からはHTML5が標準でサポートとなり、複数ファイルアップロードのためのフォーム記述が容易になりました。 View (ビュー) 配列 Array (

入力文字列の長さ(文字数)をバリデーション

CakePHP 2には、コアバリデーションに文字列の長さを検証する関数が用意されています。 文字列長(コア)バリデーション minLength - 最小文字数以上であること maxLengt

CakePHP 2.x インストール

現在まで私が商用・非商用にリリースしているCakePHPアプリケーションは全て1.3.xベースで作成しています。 まだまだロードマップ的には大丈夫そうですが、お客さん向けに納品しているアプリケーショ

Comment

@_kkoichi へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

    PAGE TOP ↑