[apache]ログローテート(日付別ログ出力)の備忘録

どうもこんばんは!
すっかり陽気も春らしくなってきて昼間は薄着でも過ごせるくらいになりましたね。

さて、今回は仕事でもプライベートでもヘビーに使っている
ローカルサーバ「apache」のログをローテートするコードを備忘録として残しておこうかと思います。

ソースコードを載せる前にローテートした背景として、xamppをインストールしたPCでPerlを使ったプログラムを組んだ際に、
Perlのエラーが出るたびにApacheのログを見て内容を確認していたんですが、
1つのログファイルに出力されるものだから数万行のエラーが溜まってしまいファイルを開くのにも時間が掛かってしまい、
これをなんとかできないかとネットで色々検索をしてローテートする方法を見つけました。
それが以下の方法。

編集するファイルは”apache/conf”(xamppを使用してるので単体だと違うかも?)内にあるhttpd.confの以下の部分。

ErrorLog "logs/error.log"
CustomLog "logs/access.log" combined

この部分を以下のように書き換えます。

ErrorLog "| bin/rotatelogs.exe logs/error_%Y%m%d.log 86400"
CustomLog "| bin/rotatelogs.exe logs/access_%Y%m%d.log 86400" combined

簡単に説明をすると、
CustomLogsの部分ではaccess.log、ErrorLogのところではerror.logの出力を指定してます。
そして| bin/rotetelogs.exeはApacheに含まれているrotetelogs.exeへの相対パス(Apache内)、
logs/access_%Y%m%d.logはログを出力するディレクトリのパス(%Y%m%dは日付フォーマット)、
86400は出力するタイミングを指定しています。

これを書き加えた後にApacheを再起動。
ブラウザからlocalhostにアクセスして、
apache/logsの中にaccess_YYYYMMDD.log、error_YYYYMMDDの形でファイルが作成されていればOK。
もし、再起動できなかったり、ログファイルが出力されない場合はパスが間違ってるかも。

これで日付別にログを出力できるんですが、
古いログはそのまま溜まっていくのでタスクスケジューラーで期間を指定して削除することも出来るそうですが、
そのやり方についてはまた後日調べてみようと思います。

この記事の参考にさせていただいたサイト様
クラップス!