CakePHPでSQLクエリをログに保存

CakePHP#cakephp#log#sql

この記事は13年以上前に書かれたものです。内容が古くなっている可能性があります。

CakePHPでアプリ開発保守を行っていると

ログを見たい時ってありますよね。

ただ、本番稼働中だとdebug値を容易には変えられません。

そこで、Cakeで用意されているdbo↓

app/model/dbo/dbo_postgres_log.php

を継承したクラスを作ってログを保存するように。


前提条件
CakePHP1.3
Postgres8.3

# touch app/model/dbo/dbo_postgres_log.php

継承ファイルを作成して

uses ('model' . DS . 'datasources' . DS . 'dbo' . DS . 'dbo_postgres');
class DboPostgresLog extends DboPostgres {

	var $queryNo = 1;

	function execute ($sql) {
	    $ret = parent::execute($sql);

	    if (defined('LOG_SQL') && LOG_SQL) {
	        $this->log(sprintf("%d. %s", $this->queryNo, $sql), LOG_DEBUG);
	        $this->queryNo++;
	    }
	    return $ret;
	}
}

こちらの内容を記載します。

んで作成したdboファイルを利用するように設定します。

# vi app/config/database.php
'driver' => 'postgres',
↓
'driver' => 'postgres_log',

最後にログ制御定数を設置します。

# vi app/config/core.php
define('LOG_SQL', true);

これで、

app/tmp/logs/debug.php

こちらにsqlログが格納されるようになったかと思います。

いちいち、社内のみdebugモードを変えて・・とか面倒な事がなくなりますね。