<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>INSPIRE TECH &#187; データベース</title>
	<atom:link href="http://inspire-tech.jp/tag/database/feed/" rel="self" type="application/rss+xml" />
	<link>http://inspire-tech.jp</link>
	<description>株式会社インスパイアデザインのプログラマーである家富正幸が、デザインやシステム開発、ソーシャルメディアや最近のトレンドなど、Webに関する様々な情報を発信しているブログです。</description>
	<lastBuildDate>Fri, 29 Jan 2016 05:25:58 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.8.41</generator>
	<item>
		<title>CakePHP1.3でデバッグレベルが0の時でもSQLのログを記録する方法</title>
		<link>http://inspire-tech.jp/2011/07/cakephp_save_sql_log/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cakephp_save_sql_log</link>
		<comments>http://inspire-tech.jp/2011/07/cakephp_save_sql_log/#comments</comments>
		<pubDate>Sat, 09 Jul 2011 13:11:13 +0000</pubDate>
		<dc:creator><![CDATA[家富 正幸]]></dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[参考]]></category>
		<category><![CDATA[開発]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[データベース]]></category>

		<guid isPermaLink="false">http://inspire-tech.jp/?p=857</guid>
		<description><![CDATA[CakePHPではデバッグレベルが2の場合、レンダリングした画面の下部に発行したSQLのログを表示してくれます。 この機能は非常に便利ですが、本番環境などでデバッグレベルを0にしていると、発行したSQLを確認する手段があ [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>CakePHPではデバッグレベルが2の場合、レンダリングした画面の下部に発行したSQLのログを表示してくれます。</p>
<div class="component img">
<a href="http://inspire-tech.jp/wp-content/uploads/2011/07/cakephp-sql-log.png"><img src="http://inspire-tech.jp/wp-content/uploads/2011/07/cakephp-sql-log-570x196.png" alt="" title="cakephp-sql-log" width="570" height="196" class="alignnone size-large wp-image-957" /></a></div>
<p>この機能は非常に便利ですが、本番環境などでデバッグレベルを0にしていると、発行したSQLを確認する手段がありません。</p>
<p>本番環境で何かしらデータベースエラーが発生した場合に、発行されているSQLを確認したいと思っても、そのままでは方法が無いのが現状です。</p>
<p>そこで、利用しているデータベースのドライバクラスを改良して、CakePHPのデバッグレベルに関わらず、発行したSQLをログファイルに保存できるように改造してみます。</p>
<h3><span>ロギング用のデータベースドライバを作成</span></h3>
<p>CakePHPのコアファイルに手を入れるのは避けたいので、データベースのドライバクラスを継承したログファイル保存用のドライバクラスを作成します。</p>
<p>ここではMySQLを利用する場合を想定します。<br />
他のデータベースを利用している場合は、適宜利用しているデータベースのドライバクラスにを読み替えて下さい。</p>
<h4>ファイルを作成</h4>
<p><code>app/models/datasources/</code> に <code>dbo_mysql_log.php</code> を作成します。</p>
<h4>dbo_mysqlを継承したコードを記述する</h4>
<p>ここでは<code>DboMysql</code>を継承した<code>DboMysqlLog</code>という名前でクラスを作成します。</p>
<p>そして、SQLを発行するための関数である<code>execute</code>関数と、SQLのログ表示に関する処理を行う<code>logQuery</code>関数をオーバーライトして、SQLをログに保存する設定であれば、実行したSQLをログファイルに保存できるように改良します。</p>
<p><script src="https://gist.github.com/1073579.js"> </script></p>
<p><code>App::import()</code>関数を利用してスーパークラスを読み込んでおかないとエラーが出ますので注意して下さい。</p>
<h3><span>データベースの接続設定を行う</span></h3>
<p><code>app/configs/database.php</code> ファイルの中で、利用するデータベースのドライバ指定を、先ほど作成したドライバに切り替えます。</p>
<pre class="brush: php">
public $development = array(
	'driver' => 'mysql_log',
	'persistent' => false,
	'host' => 'localhost',
	'login' => '********',
	'password' => '********',
	'database' => 'test',
	'prefix' => '',
	'encoding' => 'utf8'
);
</pre>
<p><code>driver</code>の指定は、作成したドライバのファイル名から <code>dbo_</code> と拡張子を除いたもので指定しましょう。</p>
<h3><span>ログ保存用の設定を行う</span></h3>
<p><code>config/bootstrap.php</code> に下記のようなコードを記述します。</p>
<pre class="brush: php">
Configure::write('Sql.log', true);
</pre>
<p>これで、デバッグレベルに関係なく、発行されたSQLが <code>tmp/logs/sql.log</code> に出力されます。</p>
]]></content:encoded>
			<wfw:commentRss>http://inspire-tech.jp/2011/07/cakephp_save_sql_log/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
