具体的には、app/webroot/配下の.htaccessに下記のように記述して
php_flag display_errors off
php_flag log_errors on
php_value error_log "./logs/php_error.log"
しかし、app/configのcore.phpの52行目あたりを
define('DEBUG', 0); // 0はプロダクションモード
に変更してみるとログにエラーが記録されない。
で、原因を調査してみると、cake/libs/configure.phpのConfigure::writeでerror_reporting(0)が実行されている為と分かった。
さすがに本番稼動でerror_reporting(0)はまずい。。。
もちろん、画面にエラーを表示させてはいけないが、ログに保存しておかないと障害が発生した場合の原因が特定しづらくなるからだ。
で、対応策を考えてみた
1.error_reporting(0)をerror_reporting(E_ALL)に書き換える。
2.app/webroot/index.phpの78行目の
require CORE_PATH . 'cake' . DS . 'bootstrap.php';
の下でerror_reporting(E_ALL)を実行させる。
1の場合、cakeフォルダ配下になるのでできれば直接書き換えたくない。
2の場合、いったんerror_reporting(0)が実行されてからE_ALLと実行しているので、エラーを拾いきれない場合がある。
で結局、1の直接書き換えるを採用することにした。
理由は、エラー出力レベルをあちこちで変えられたくないことと、
CakePHPをバージョンアップに伴い書き換えないといけないが、これは、app/webroot/index.phpでも同じことだからだ。

