うまいぼうぶろぐ

linuxとhttpdとperlのメモ

1つのログをVirtualHostごとのログに分割

apache付属のsplit-logfileを使えば、1つのログからVirtualHostごとに分割できる。ただし、ログの先頭にホスト名がいるのでLogFormatの設定が必要。

log formatの設定

LogFormat "%V %h %l %u %t \"%r\" %>s %b" vhost
CustomLog logs/multiple_vhost_log vhost 

ここではcommonのフォーマットの先頭に%Vを追加。リンク先のapacheのサイトにはservernameに%vを指定してるけど、リクエストが来たVirtualHost名を取得するには%Vでないといけない。

%v リクエストを扱っているサーバの正式な ServerName
%V UseCanonicalName の設定によるサーバ名

%vだとServerNameがロギングされる。(ServerAliasで指定したホストでアクセスが来てもServerNameの値がロギングされる)
%Vだとhostヘッダの値が取れる。

log 分割

split-logfile < multiple_vhost_log

"ServerName".logというファイルが出来る。ログからはの先頭のServerNameに該当する部分は削除される。

# cat access.log
www.hoge 127.0.0.1 - - [25/Aug/2008:14:29:18 +0900] "GET / HTTP/1.0" 200 13 "-" "-"
www.fuga 127.0.0.1 - - [25/Aug/2008:14:51:39 +0900] "GET / HTTP/1.0" 200 13 "-" "-"
# split-logfile < access.log
# cat www.hoge.log
127.0.0.1 - - [25/Aug/2008:14:29:18 +0900] "GET / HTTP/1.0" 200 13 "-" "-"
# cat www.fuga.log
127.0.0.1 - - [25/Aug/2008:14:51:39 +0900] "GET / HTTP/1.0" 200 13 "-" "-"