フレームワークのロガーを追っていたら
基本的なPHPのログ出力方法についてわからなくなったので
基本に戻ろうと自分なりにまとめてみました。
環境
CentOS release 6.3 (Final)
Apache/2.2
PHP 5.3
php.iniの設定
webにHTMLとして表示する場合は
ログ出力レベルを指定し、ログ表示設定をONにします。
error_reporting = E_ALL | E_STRICT
display_errors on
※商用などでは必ずOFF
ファイルに残すために、log_errorsを設定します。
log_errors = On
httpd.confの確認
php側で設定しない場合、phpのエラーログはサーバの設定に依存します。
httpd.confのErrorLogにて設定されています。
ErrorLog logs/error_log
ServerRootの設定 + ErrorLogの設定 = ログ置き場ってことですね。
吐き出すファイルの設定
php.iniのerror_logにログの出力先を設定します。
ファイル名を記述する場合は、絶対パスで記載し、
webサーバのユーザが書き込める必要があります。
※相対パスでも書き込めますが、ドキュメントルートからになります。
error_log = /var/log/php/error.log
syslogを通して吐き出すこともできます
error_log = syslog
syslogを使用しているなら/etc/syslog.confの設定値にもよりますが、
デフォルトでは/var/log/messages に吐かれます。
※syslogを使用して、phpのエラーログを別ファイルで保存するためには
ファシリティuser、レベルinfoを指定します。
例
user.info /var/log/php/error.log
設定適用のためリスタート
/etc/rc.d/init.d/rsyslog restart
syslogでやると結構楽ですね。
ただphp以外にuser.infoで吐かれるsyslogがあると混乱しそう。