Как настроить LogFormat для виртуальных хостов Apache?

6324
Mina Hafzalla

Мне действительно нужна помощь с этим. На моем сервере несколько виртуальных хостов, у каждого виртуального хоста есть свой журнал доступа, мне нужно иметь возможность настроить LogFormat для каждого виртуального хоста, существующего на сервере. Я изменил LogFormat, httpd.confно на самом деле он влияет только на основной журнал доступа, а не на виртуальные хосты.

Вот мой LogFormat:

<IfModule log_config_module> LogFormat "%v:%a %l %u %t \"%r\" %>s %b \"%i\" \"%i\" %i" combinedvhost LogFormat "%h %l %u %t \"%r\" %>s %b \"%i\" \"%i\" %i" combined LogFormat "%h %l %u %t \"%r\" %>s %b %i" common  CustomLog "logs/access_log" combined CustomLog logs/access_log combinedvhost  <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%i\" \"%i\" %i" combinedio </IfModule>  </IfModule>  <IfModule mod_log_config.c> LogFormat "%v:%a %l %u %t \"%r\" %>s %b \"%i\" \"%i\" %i" combinedvhost LogFormat "%h %l %u %t \"%r\" %>s %b \"%i\" \"%i\" %i" combined LogFormat "%h %l %u %t \"%r\" %>s %b %i" common LogFormat "%i -> %U" referer LogFormat "%i" agent  CustomLog logs/access_log common CustomLog logs/access_log combined CustomLog logs/access_log combinedvhost  </IfModule> 

Приведенный выше LogFormat влияет только на основной журнал доступа, который расположен по адресу: /usr/local/apache/logs/access_logОднако он не влияет на виртуальные хосты на сервере, чьи журналы доступа расположены по адресу:/home/username/access-logs/domain.com

Я не уверен, что у меня что-то не так в самом LogFormat или я что-то упустил. Я потратил много часов, пытаясь решить эту проблему, но не нашел решения. Я был бы очень признателен, если бы кто-то мог пролить свет на это. Спасибо.

1

2 ответа на вопрос

2
boot13

The trick is to add CustomLog directives inside each VirtualHost in your Apache config files. For example:

<VirtualHost *:80> ServerName www.site1.com DocumentRoot /var/www/www.site1.com/htdocs CustomLog /var/log/apache/www.site1.com-access.log combined ErrorLog /var/log/apache/www.site1.com-error.log </VirtualHost> <VirtualHost *:80> ServerName www.site2.com DocumentRoot /var/www/www.site2.com/htdocs CustomLog /var/log/apache/www.site2.com-access.log combined ErrorLog /var/log/apache/www.site2.com-error.log </VirtualHost> 

There are more useful examples here.

Можете ли вы уточнить это (как это сделать)? fixer1234 9 лет назад 0
0
Puneet Khurana

Хитрость заключается в том, что вы должны иметь оба LogFormat и CustomLog в одном пуле VirtualHost

 <VirtualHost *:443> ServerName my.site.com LogFormat "%i %l %u %t \"%r\" %>s %b %D " commonvhost ErrorLog "|/opt/mw/apache-2.4.25-instance1/bin/rotatelogs /apps/logs/my.site.com-443-error.%Y.%m.%d.log 86400" CustomLog "|/opt/mw/apache-2.4.25-instance1/bin/rotatelogs /apps/logs/my.site.com-443-access.%Y.%m.%d.log 86400" commonvhost </VirtualHost>  <VirtualHost *:80> ServerName my.site.com LogFormat "%i %l %u %t \"%r\" %>s %b %D " commonvhost ErrorLog "|/opt/mw/apache-2.4.25-instance1/bin/rotatelogs /apps/logs/my.site.com-80-error.%Y.%m.%d.log 86400" CustomLog "|/opt/mw/apache-2.4.25-instance1/bin/rotatelogs /apps/logs/my.site.com-80-access.%Y.%m.%d.log 86400" commonvhost </VirtualHost> 

Похожие вопросы