ポイント
PHP エラーログファイルは、/var/log/php_errors.log とします。
- ローテーションさせるための設定ファイルの作成をしますが、Apache の設定ファイルをコピーして、これをひな形とします(そのほうが楽です♪)。
cp -ap /etc/logrotate.d/httpd /etc/logrotate.d/php vim /etc/logrotate.d/php
- Apache と同じ条件でのローテーションで問題ありませんので、1行目の対象となるログファイルの設定のみ変更します。
/var/log/php_errors.log { missingok notifempty sharedscripts postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript }
- ローテーション設定の確認です。
# -d テストとして実行する。 # -v 詳細な情報を表示する。 logrotate -dv /etc/logrotate.d/php
- 今すぐに実行したい場合は「-f」オプションで実行します。
# -f 指定したローテーションを今すぐに実行します。 logrotate -df /etc/logrotate.d/php
以下、実際にやってみました記録です。
1.まずは PHP ログの設定
まずは PHP のエラーログの出力ファイルを予め作成しておきまして、php.ini 設定ファイルで指定するところから始めました。
# ログファイル作成・属性設定・確認 touch /var/log/php_errors.log chown apache:apache /var/log/php_errors.log ll /var/log/php_errors.log
続いて、今作成したファイルにエラーログを出力するように php.ini を修正しました。
# PHP 設定ファイルのバックアップ cp -a /etc/php.ini /etc/php.ini.org # PHP 設定ファイルの編集 vim /etc/php.ini
エラーログ出力に関係する項目を次のように設定しました。
# ログレベル。本番環境なので E_ALL としました。 error_reporting = E_ALL # エラーをログに残す log_errors = On # エラーの内容を詳しく知る為に 4KB 程に設定 log_errors_max_len = 4096 # エラーログ出力先 error_log = "/var/log/php_errors.log"
2.次に logrotate の設定と確認
これはポイントで説明した通りになります。最初の2つ、ローテート設定ファイルを作成しまして、記述する箇所です。
cp -ap /etc/logrotate.d/httpd /etc/logrotate.d/php vim /etc/logrotate.d/php
コピー元である Apache の logrotate 設定ファイルの1行目のみ修正しています。
/var/log/php_errors.log { missingok notifempty sharedscripts postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript }
すかさず設定の確認をいたしましたが、これもポイント通りです。
logrotate -dv /etc/logrotate.d/php
次のように設定が表示されました。
reading config file /etc/logrotate.d/php reading config info for /var/log/php_errors.log Handling 1 logs rotating pattern: /var/log/php_errors.log 1048576 bytes (no old logs will be kept) empty log files are not rotated, old logs are removed considering log /var/log/php_errors.log log does not need rotating not running postrotate script, since no logs were rotated
3.最後に、php.ini の修正を反映
Apache を再起動することにより、php.ini への変更を反映します。補足しますと、Apache 再起動は、logrotate の設定変更と関係ありません。
/etc/init.d/httpd restart
以上です。
あとは、1週間後くらいに /var/log/ ディレクトリを確認しまして、次のようにローテーションされていれば OK です。
[root@oki2a24 ~]# ll /var/log/php_errors.log* -rw-r--r-- 1 apache apache 35550704 3月 7 22:51 /var/log/php_errors.log -rw-r--r-- 1 apache apache 8921421 3月 3 01:57 /var/log/php_errors.log.1
補足としては、ポイントで挙げた「logrotate -df /var/log/php_errors.php」は実行しなくて良いです。気になる時だけ実行するスタンスで大丈夫です。
おわりに
以前 php.ini の設定変更でエラー出力先を指定したものの、ファイルが自動で作成されなかったり、ファイルの肥大が止まらなかったりと、さんざんでございました。
でも、これでようやく php.ini の最低限の設定がわかってきたような気がしています。php.ini の自分なりのお勧め設定を考えました♪【試行錯誤】 | oki2a24 の後に、本投稿の設定をすればよいのです。
最後に、今までの過程を並べまして終わろうと思います。
- php.ini の自分なりのお勧め設定を考えました♪【試行錯誤】 | oki2a24
- php.ini で設定しても出力されないエラーログをちゃんと出すポイント! | oki2a24
- logrotate の設定をサンプルから勉強します♪【実践的】 | oki2a24
以上です。
「【logrotate】PHP エラーログでローテーションを!【できました!】」への4件の返信
[…] 【logrotate】PHP エラーログでローテーションを!【できました!】 | oki2a24 […]
[…] 【logrotate】PHP エラーログでローテーションを!【できました!】 | oki2a24 […]
[…] https://oki2a24.com/2013/03/19/set-logrotate-php-error-log/ […]
「php error log rotate」のキーワードで検索から着ました。
とても参考になりました!ありがとうございました!