Apache アクセスログを目的別に分けて出力する方法

携帯サイトで、「Flash待ち受け」「画像待ち受け」「デコメテンプレート」の3種類のダウンロード回数をカウントするサイトを作成したときの話。
それぞれのダウンロード回数をアクセスログの行数(つまり画面に表示した時点でダウンロード)で判断することになった。
その適用方法を紹介します。
# vi /etc/httpd/conf/httpd.conf


#
# For a single logfile with access, agent, and referer information
# (Combined Logfile Format), use the following directive:
#
SetEnvIf Request_URI “decome\.dmt” decome
SetEnvIf Request_URI “decome\.hmt” decome
SetEnvIf Request_URI “decome\.khm” decome
SetEnvIf Request_URI “flash0\.swf” flash
SetEnvIf Request_URI “waiting0\.gif” waiting
CustomLog logs/decome1_log combined env=decome
CustomLog logs/flash_log combined env=flash
CustomLog logs/waiting_log combined env=waiting
CustomLog logs/access_log combined             
→mod_setenvif を使用して該当のファイル名がアクセスログに記録されるタイミングに、各個別ファイルと「access_log」に記録されるようにします。一番後ろにつけた名前(env)によって振分をおこないます。

・・・
CustomLog “| /usr/sbin/rotatelogs /home/fs/www/accesslog/access_log.%Y%m%d 86400 540” combined
CustomLog “| /usr/sbin/rotatelogs /home/fs/www/accesslog/decome0_log.%Y%m%d 86400 540” combined env=decome
CustomLog “| /usr/sbin/rotatelogs /home/fs/www/accesslog/flash_log.%Y%m%d 86400 540” combined env=flash
CustomLog “| /usr/sbin/rotatelogs /home/fs/www/accesslog/waiting_log.%Y%m%d 86400 540” combined env=waiting

→バーチャルホストを使用している場合は、ここにも「CustomLog 」を追加します。最後に「env」を忘れると、うまく振分られないことがありますので、忘れずにつけましょう。


後はできたファイルの行数を数えれば各ダウンロード回数となります。
(注)Basic認証をかけた場合は1回のアクセスで2行追加される場合があります。