Intranet入門 Apacheのログファイル管理ソフト Rotatelogs.exeについて

Apacheはアクセスされた記録を標準ではApache\logsにaccess_logとしてセーブします。

実際のApacheの運用をするとログファイルを見るのですが、syslogデーモン、syslog管理ソフト、を動かしていれば数メガバイトのサイズになってもあまり気にしないでもすみますが、Notepadなんぞでオープンしようものなら数十分待たされた挙げ句ファイルがオープンできませんなんてエラーを返されたひには腹の立つことこのうえもありません。


rotatelogs.exeはファイルを指定した時間で切り出し、別々のログファイルを作成します。不精な人にはこのファイルサイズを見て”ふむふむ”とやるのに便利です。 NTでGMT以外の時間でも動作するように直しました。 ファイルはFTPにrotatelogs.zipではいっています。



このログファイル名access-logもディレクトリもhtttp.confで設定できます。

オリジナルのhttpd.conf(httpd.conf-dis-winをリネームする)では

# ErrorLog: The location of the error log file. If this does not start
# with /, ServerRoot is prepended to it.

#日本語訳 エラーログ エラーログファイルのディレクトリ。 もし /で始まらないときは

#ServerRootで指定されたディレクトリになる。 prependedなんて知らない。

#用件のみ エラーログの出力先を指定する。 ServerRootで指定するディレクトリからのディレクトリである。 ファイル名error_logを変更することでファイル名を変更できる。
##現実的には 次の行は ErrorLog logs/error.logとしています。
ErrorLog logs/error_log

# TransferLog: The location of the transfer log file. If this does not
# start with /, ServerRoot is prepended to it.
## TransferLog はアクセスログのディレクトリとファイル名を指定します。 ##ServerRootで指定するディレクトリからのディレクトリである。次の行の設定では##access_logという一本のログファイルが作成されます。

TransferLog logs/access_log

##Rotatelogsでログファイルを分割するには上の行を次のように直します。

#TransferLog "|C:\Apache\rotatelogs.exe C:\Apache\logs 86400"

#最初のTransferLogの行を#でコメントアウトし 上の行のコメント#を削除してください。

どのように動作するかといいますと、Apacheが吐き出すログファイルをPipe(知らない人は気にしない)でファイルに吐き出します。 この例ではPipeでrotatelogs.exeが指定されています。 rotatelogs,exeは実行されると C:\Apache\logsに日付をファイル名とし.logを拡張子にしたログファイルを 86400秒ごとに作成します。 86400秒は24時間です。 この時間を変えるとそれなりの時間のファイルを作成しますが、ファイル名が同じ日付のため前のログファイルが消されます。

さて本来のrotatelogsは このrotatelogs.exeのディレクトリを指定しなくても、もしServerRoot、Apacheがあるディレクトリ、にあれば実行されるのですが、なぜかApacheが悪いのかNTがぼけているのか、動作しません。 必ず絶対アドレスを指定してください。 同じようにRotatelogs.exeが吐き出すログファイルのディレクトリも絶対アドレスを指定しないとかき出しません。 また Apacheのバージョンが1.3.3以前ですとログファイルはSystem32の下のかき出されます。

簡単に言うと上の記述どおりにhttpd.confを直し、rotatelogs.exeをApache.exeのディレクトリにコピーすれば後はかってに作成されます。

なお日にちの更新の為内部でtime()関数で動作していましたが、localtimeで更新されるようにGmtとの時間差を足して、ローカル時間ごとにファイルが新しい日付けで作成されるようになっています。

作成されるファイル名は19981120.logのようになります。

ソースコードのオリジナルはApache\src\supportにあります。

コンパイルにはいくつかのヘッダファイルをApache\includeから作業するディレクトリにコピーしてください。 コンパイル時にエラーが出るので分かります。

ついでに次のようなログフォーマットの指定を加えると自由にログ情報の内容を変えることが出来ます。 詳細はApache.orgでlogformatで検索してください。

#LogFormat "%h|%l|%u|%t|%r|%>s|%b|%{user-agent}i|%{referer}i"


ちなみにやっていませんが、同じhttpd.confのはじめのほうにある次のような指定を変更すると

# HostnameLookups: Log the names of clients or just their IP numbers
# e.g. www.apache.org (on) or 204.62.129.132 (off)
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on.
HostnameLookups off

これをoffからonにするとwww.apache.org (on) を返します。オフのときは 204.62.129.132 (off)。 ただこれはトラフィックを増やすのでどうでしょうか? まあVideoまでぶちまけている昨今のインターネットですから、まあたいした問題ではないのでしょうか?