Почему я не могу заставить директиву Apache CustomLog работать?

Я пытаюсь использовать директиву Apache CustomLog для создания некоторых пользовательских файлов журналов, но не могу заставить их работать. Вот конфигурация, которую я использую для настраиваемых журналов:

LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

CustomLog /var/log/apache2/jb_common common
CustomLog /var/log/apache2/jb_referer referer

Apache создает оба этих файла журнала при запуске, поэтому он определенно видит директивы CustomLog, но никогда ничего не пишет об этих файлах; однако журнал доступа по умолчанию (access.log) записывается в.

Любые идеи? Я запускаю Apache 2.2 на Ubuntu 8.10.

Ответ 1

У меня такая же проблема с сервером Ubuntu 9.10 и Apache 2.2.12. Я настраиваю сервер Subversion с mod_dav_svn и добавил директиву CustomLog в /etc/apache2/mods-available/dav_svn.conf для регистрации запросов Subversion, но имел ту же проблему (файл журнала был создан, когда Apache запущен, но никогда не был записан):

<Location /svn>
  ...
</Location>

LogFormat "%t %u %{SVN-ACTION}e" svn_log
CustomLog /var/log/apache2/svn_access.log svn_log env=SVN-ACTION

Есть два способа обхода проблемы, которые я нашел, которые в основном равны одному и тому же. Я документирую оба здесь, потому что у них разные плюсы и минусы.

Обходной путь 1

  • Удалите директиву CustomLog из вашего файла конфигурации, если вы настроили его в отдельном файле конфигурации.

  • Добавьте директиву CustomLog на ваш сайт VirtualHost. Для меня это было в /etc/apache2/sites-available/default-ssl, потому что я разрешаю только SSL-доступ к репозиторию Subversion. Если вы используете /etc/apache2/sites-available/default, вы захотите отредактировать этот файл вместо этого (или в дополнение к default-ssl, если вы используете оба).

  • Перезапустите Apache:

sudo /etc/init.d/apache2 restart

Pro

У вас может быть несколько директив CustomLog в записи VirtualHost для вашего сайта, и все они будут работать.

Con

Вам нужно переместить запись CustomLog в запись вашего сайта VirtualHost вместо того, чтобы иметь ее в отдельном файле конфигурации.

Обходной путь 2

  • Прокомментируйте директиву CustomLog на вашем сайте VirtualHost. Если вы используете одну из конфигураций сайта по умолчанию (default или default-ssl), будет существовать директива CustomLog для журнала доступа, которую вам нужно будет прокомментировать (да, это отключает ведение журнала доступа по умолчанию Apache).

  • Добавьте директиву CustomLog в соответствующий файл конфигурации. Для меня это было /etc/apache2/mods-available/dav_svn.conf.

  • Перезапустите Apache:

sudo /etc/init.d/apache2 restart

Pro

Вы можете сохранить директиву CustomLog в отдельном файле конфигурации.

Con

У этого обходного пути есть очевидный недостаток: вам нужно отключить ведение журнала доступа по умолчанию Apache, но для меня это меня не волнует, поскольку я использую только сервер для доступа к Subversion.

Заключение

Ни одно из этих обходных решений действительно не идеально, но до сих пор я не нашел способ заставить его работать, кроме двух обходных решений выше. Полагаю, нам придется подождать, пока будет исправлена ​​следующая версия Apache для исправления этой проблемы.