ログのローテーション(rotetalogs)

広告

ログは特に指定しなければ1つのファイルに記録を続けていきます。そこでログを一定の期間毎に別のファイルに切り替えていくことが出来れば例えば1日単位で別のログファイルとして記録するといったことが可能になり管理も楽になります。

ログをローテーションするためのユーティリティプログラムをApacheでは用意されています。「(Apacheをインストールしたディレクトリ)¥Apache2.2¥bin」ディレクトリに含まれている「rotatelogs」プログラムを使います。

使い方は次の通りです。

rotatelogs 対象ログファイル 指定時間

指定時間には秒単位でログを分割する時間を指定します。1日単位であれば「60×60×24=86400」を指定します。

ログのローテーションは「httpd.conf」に設定することで自動的に行うことができます。設定するには「CustomLog」に対して次のように設定します。

CustomLog "|rotatelogs 対象ログファイル 指定時間" ログのフォーマット名

例えば「common」ログフォーマットを使う場合に1日単位のログローテーションを設定するには次のように記述して下さい。

CustomLog logs/access.log common
CustomLog "|¥"D:/Apache Group/Apache2.2/bin/rotatelogs¥" ¥"D:/Apache Group/Apache2.2/logs/access.log¥" 86400" common

これでログが保存される時に指定した時間を経過するたびに別のログファイルを作成して記録するようになります。

では実際に試してみます。先ほどの設定を「httpd.conf」に設定してからApacheを再起動します。そして何かApacheで公開されているファイルに対してアクセスして下さい。

ログのローテーション

上記のように新しく「access.log.1161648000」と言うファイルが作成されてログが保存されています。後ろについている「.1161648000」は1970年1月1日からの経過秒数を表しています。

それではクライアントに設定されている日付を2日進めてから改めてApacheのファイルへアクセスしてみます。

ログのローテーション

前回作成されたログから86400秒以上経過しているため、新しいログファイルが作成されて記録が行われています。

ログファイルのフォーマットを指定する

特に設定を行わない場合、ログファイルの後ろには1970年1月1日からの経過秒数が表示されます。このままでは分かりにくいためログを区別するために付く部分のフォーマットを指定できます。例えば経過秒数ではなく年月日を表示するようにするには次のように記述します。

CustomLog "|¥"D:/Apache Group/Apache2.2/bin/rotatelogs¥" ¥"D:/Apache Group/Apache2.2/logs/access.log.%Y-%m-%d¥" 86400" common

対象のログファイル名の後にピリオド(.)を付けその後にフォーマットを指定します。今回は年月日を"-"で区切った形式に指定しました。

では実際に試してみます。先ほどの設定を「httpd.conf」に設定してからApacheを再起動します。そして何かApacheで公開されているファイルに対してアクセスして下さい。

ログのローテーション

今度は指定したフォーマットの形式で日付が付加されています。

( Written by Tatsuo Ikura )