Linuxサーバ上でPHPのLOGをファイルに出力する設定について、簡潔にまとめてみました。
やりたいこと
phpのerror_log()関数で出力されるlogを以下のように”/var/log/php/”に出力して、logrotateを使って一定期間でローテートしたい。
PHPのLOG出力設定
log置き場の作成
“/var/log/php/”にログファイルを出力させたいので、ディレクトリが無ければ作成しておきます。
1 |
mkdir /var/log/php/ |
php.iniの設定
phpのlogの出力先は設定ファイル”php.ini”で設定します。
“php.ini”の場所は以下のコマンドで確認出来ます。
1 |
php -r "phpinfo();" | grep php.ini |
”php.ini”を開いて下記の行を追加してerror_logのデフォルトの出力先を”/var/log/php/php_errors.log”に設定します。
1 |
error_log = /var/log/php/php_errors.log |
apacheの再起動
apacheのmoduleとしてphpを利用している場合は、設定を反映させるためapacheの再起動をします。
1 |
apachectl restart |
log出力の確認
phpの”-r”オプションでコマンドラインからerror_log()を実行して、設定したファイルにlogが出力されていることを確認します。
1 2 |
php -r "error_log('test msg',0);" cat /var/log/php/php_errors.log |
LOGROTATEの設定
ログのローテートはlogrotateコマンドを使います。
ここではhttpdのローテート用の設定をコピーして作成する方法を紹介します。
phpのlogrotate設定ファイルを作成
設定ファイルの有無を確認
1 |
ls -l /etc/logrotate.d |
httpdの設定ファイルをコピー
1 |
cp /etc/logrotate.d/httpd /etc/logrotate.d/php |
コピーした”/etc/logrotate.d/php”の先頭の
“/var/log/httpd/*log {” の記述を
“/var/log/php/*log {“に書き換える。
1 2 3 4 5 6 7 8 9 |
/var/log/php/*log { missingok notifempty sharedscripts delaycompress postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript } |
エラーがないかチェック
1 |
logrotate -d /etc/logrotate.d/php |
設定の反映と確認
設定の反映
1 |
logrotate /etc/logrotate.conf |
以下のコマンドで即時にローテートが実施できます。
1 2 |
logrotate -f /etc/logrotate.conf ls -l /var/log/php/ |
以上です。
はじめまして。
ログの設定方法、とてもありがたいです!
コメントありがとうございます。
お役に立てて良かったです。