2011年1月25日火曜日

Apacheで特定のアクセスをログから除外したり、月ごとにログファイルを分けたりする

(2011/1/26変更:ログのローテーションはLinuxだったらlogratateに任せればいいかなと思ってWindows限定の書き方をしたけど、Windowsじゃなくてもrotatelogsを使いたい場面はあると思い変更した。)

Apacheのログ出力設定のメモ。

こんなことをしたい場合の例。

  • SetEnvIfとenv=!を使って、任意のアクセスをログ出力対象外にする
  • ログ内容のフォーマットはcombinedで (もっと詳しくログりたい場合は自分でフォーマットを作る)
  • (Windowsの場合、)Apacheに標準で付いてくるrotatelogsを使って任意の時間でログファイルを分割する

#ログに残さないアクセス元
SetEnvIf Remote_Addr 127.0.0.1      nolog
#前方一致でも可
SetEnvIf Remote_Addr 192.168.       nolog

#月ごとにローテーションする場合は%Y%m
CustomLog "|bin/rotatelogs -l logs/access_%Y%m.log 86400" combined env=!nolog

と、思ったら3年前に自分で既にメモしていた... → floatingdays: ApacheでURIに応じてアクセスログを分ける方法

2 件のコメント:

kirifue さんのコメント...

初めてコメントさせて頂きます。
月毎にローテーションする方法を調べていて、たどり着きました。
「86400」と指定すると1日毎にローテートするような気がしますが、この方法でうまく運用できていらっしゃいますか?
それとも、私の認識不足でしょうか。

admin さんのコメント...

kirifueさん、コメントありがとうございます。

「86400」を指定すると、毎日深夜0時にログファイルを切り替えますが、ファイル名として「logs/access_%Y%m.log」を指定しているので、月が変わっていなければ、結果的に同じファイルにログを書き込みます。
例えば今ならログファイルは「access_201205.log」になります。
月毎にログファイルを替えることのキモは、「86400」の方ではなく、ファイル名の中の「%Y%m」の部分です。

(参考:
http://fdays.blogspot.jp/2007/10/apache.html )

ブログ アーカイブ

tags