Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

CakePHP2.0でSQLのログを吐き出す方法

ホンマはApp/Model/DataSourceに置くべきなんだけど、とりあえず動いたので。MySqlの場合。

1. /lib/Cake/Model/Datasource/DatabaseにMysqlLog.phpを作る。

2.作ったファイルをこんな感じのクラス定義を行う。

<?
App::uses('Mysql', 'Model/Datasource/Database');
//Mysqlクラスを継承するのがポイント
class MysqlLog extends Mysql {
    
    function execute($sql){
        //Mysql→Dbosourceとエスカレーション  
        $ret = parent::execute($sql);
        //sqlをapp/tmp/sql.logに吐き出す
        $this->log(sprintf("%s",$sql),'sql');
        return $ret;  
    }  
}

3 database.phpのconfigをいじる

<?
class DATABASE_CONFIG {
	public $default = array(
                //1で作ったログ吐き出しクラスを使う
		'datasource' => 'Database/MysqlLog',
		'persistent' => false,
		'host' => 'localhost',
	);

いじょ。