У меня есть настройка виртуального хоста с выключенным usecanonicalname.
У меня есть ServerName domain.com и ServerAlias * .domain.com на виртуальном хосте.
Использование строки% v LogFormat apache2 будет захватывать только domain.com, и я пытаюсь заставить ее захватывать foo.domain.com, чтобы я мог соответственно разделить журналы.
LogFormat, который я сейчас использую,
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
С помощью % {Host} i в вашем формате журнала должно быть указано содержимое заголовка "Host" ... который выглядит именно так, как вы хотите.
Цитата из документации:
% {Foobar} i - содержимое строки (строк) заголовка Foobar: в запросе, отправленном на сервер. На это влияют изменения, внесенные другими модулями (например, mod_headers). Если вас интересует, каким был заголовок запроса до того, когда большинство модулей изменили бы его, используйте mod_setenvif, чтобы скопировать заголовок во внутреннюю переменную среды и записать это значение с помощью% {VARNAME} e, описанного выше.
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
Надеюсь это поможет.
Почему бы просто не вставить отдельные директивы CustomLog и ErrorLog в каждое определение виртуального хоста?
<VirtualHost *:80>
ServerAdmin webmaster@place
DocumentRoot /var/www/hosted/place/root
ServerName www.place
AddHandler cgi-script .pl
CustomLog /var/www/hosted/place/logs/access_log combined
ErrorLog /var/www/hosted/place/logs/error_log
</VirtualHost>