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
関連記事
-
-
checkボックスを実装
selectボックスに引き続いてcheckボックスの実装方法をおさらいしてみます。 コードは、CakePHP 2と1.3両方で実装可能です。デモ モデルは、こちらも以下 CREATE TA
-
-
数値系バリデーション
CakePHP 2になっていくつか数値用バリデーションルールが追加されています。 数値用 (コア)バリデーション decimal - 十進数であること numeric - 数値であること
-
-
Jsヘルパーを使用してAjax更新
更新処理でページ遷移を伴う場合、ページ全体をレスポンスするのに対して、Ajax処理ではページの一部のレスポンスが可能となるためサーバからの通信量を抑えることが可能となります。デモ head
-
-
独自のバリデーションルールを作成
CakePHPで組み込みバリデーションルールをつくる方法は、正規表現を定義する方法と独自メソッドを定義する方法の2つがあるようです。 参考 Custom Validation Rules 正規
-
-
Blowfishを使用してハッシュ化する
使用方法 Blowfishを採用してハッシュ化を行う場合、Securityクラスのhashメソッドを呼び出します。第2引数に'blowfish'を指定し、第3引数を指定しないもしくはfalseにしま
-
-
Formヘルパーのinputタグのdiv/labelなどの設定
Formヘルパーのinputではデフォルトでは以下のようにdivで囲われて、labelが付与されて出力されます。 CSSのフレームワークなどであらかじめ決まったスタイルがある場合に便利に作られていま
-
-
recursive設定によるfind()性能改善
CakePHPでは、モデルにアソシエーションを設定している場合、recursive(=>joinする階層)はデフォルトで0に設定されています。「recursiveゼロ」の意味するところとは、「1跨ぎま
-
-
入力文字列の長さ(文字数)をバリデーション
CakePHP 2には、コアバリデーションに文字列の長さを検証する関数が用意されています。 文字列長(コア)バリデーション minLength - 最小文字数以上であること maxLengt
-
-
ログインに追加の条件を付与する「scope」
ユーザ登録では、仮登録処理(status=1)から送付したメール内のリンクをクリックしてもらい本登録(status=0)を行ってもらう実装をしました。仮登録の状態ではログインできないように実装するには
-
-
バリデーションエラーメッセージの取得
CakePHP 2.xになってバリデーションエラー時に返却されるメッセージのデータ形式が変更になったようです。1.3系では、ひとつのフィールドに対して返却されるメッセージは一つのルールのみですが、2.
- PREV
- WYSIWYGエディタを実装
- NEXT
- Twenty Twelve 投稿日・投稿者を非表示に
Comment
“CakePHP 2.x | SQLクエリーをログに出力する” http://t.co/5UN8AQQM0Z
CakePHP 2.x | SQLクエリーをログに出力する http://bit.ly/1gIixep