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 "-" "-"