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

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

関連記事

(メール・URL・電話・郵便・IP) データ バリデーション

今回は、プロフィール情報に使用されるデータに絞ったバリデーションルールです。 バリデーションルール 以下の5つのバリデーションルールがコアに用意されています。 email メールアドレス

テーブルからランダムにデータを取り出す(find)

CakePHPでテーブルから特定件数のレコードをランダムに取得するには以下のように指定するとできます。 $this->data = $this->Bulkdata->find( 'all',

ハッシュ関数の選択とハッシュ化処理

CakePHPでは、ログイン時にはpasswordを自動的にハッシュ化して認証を行ってくれますが、そのパスワードを登録する際は、明示的にハッシュ化する必要があります。 ハッシュ関数の選択 ハッ

多言語サイト向けに翻訳ファイルを使って翻訳を行う

CakePHPには、翻訳をビヘイビアを使用する方法と翻訳ファイルを使用する方法の2つがあるそうです。(他にもあるのかな?) 今回は、翻訳ファイルを使用して言語の切り替えを行い、その言語設定をCook

パス定数と変更方法やURLの取得

CakePHPは基本的にはディレクトリそのまま配置することで構築が可能ではありますが、設定パスを変更することでセキュリティに考慮した構成にすることや運用性をもたせたものにすることが可能になります。

CakeEmailでメール送信(@gmail)

CakePHP 2になって追加されたクラスCakeEmailがシンプルに使えます。これを使用してメール送信を行う処理を実装してみました。 CakeEmailクラスの読み込み /app/Config

FormヘルパーのMagicOption (マジックオプション) 

Formヘルパーでは、「フィールド名」,「テーブルカラムのデータ型」もしくはモデルの「バリデーション設定」によりフォーム要素を決定したり、自動で属性を付与する「マジックオプション」と呼ばれるものがある

FullCalendarを使用してカレンダーアプリケーション

カレンダーアプリケーションを作成するため、カレンダー表示できるプラグインを探索して出会ったFullcalendarを試してみました。シンプルに使用できる上に、オプションがかなり豊富です。ダウンロード

Jsヘルパーを使用してAjax更新

更新処理でページ遷移を伴う場合、ページ全体をレスポンスするのに対して、Ajax処理ではページの一部のレスポンスが可能となるためサーバからの通信量を抑えることが可能となります。デモ head

hasOne アソシエーション

hasOneアソシエーションはテーブル間で1つのレコードに対して他のテーブルに紐付くレコードが1つの場合にjoinする場合に使用します。 CakePHPのドキュメントにならってUserモデルとP

Comment

Message

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

*

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

    PAGE TOP ↑