カテゴリー
Linux

【logrotate】PHP エラーログでローテーションを!【できました!】

ポイント

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 の後に、本投稿の設定をすればよいのです。

最後に、今までの過程を並べまして終わろうと思います。

  1. php.ini の自分なりのお勧め設定を考えました♪【試行錯誤】 | oki2a24
  2. php.ini で設定しても出力されないエラーログをちゃんと出すポイント! | oki2a24
  3. logrotate の設定をサンプルから勉強します♪【実践的】 | oki2a24

以上です。

「【logrotate】PHP エラーログでローテーションを!【できました!】」への4件の返信

コメントを残す