Мне нравится поддерживать отдельные файлы журналов Apache2 для каждого из моих именованных виртуальных хостов, например:
<VirtualHost *:80>
ServerName myhost.example.com
ErrorLog /var/log/apache2/myhost-error.log
</VirtualHost *:80>
Назначенный файл правильно собирает сообщения об ошибках, генерируемые самим Apache2, например, 404:
[Thu Jul 18 12:07:45 2013] [error] [client 10.0.0.141] File does not exist: /home/mike/myhost/htdocs/favicon.ico
Но когда myhost запускает сценарии mod_perl, которые генерируют свои собственные сообщения журнала (например, с использованием print to STDERR), эти сообщения по-прежнему появляются в глобальном журнале ошибок Apache2, /var/log/apache2/error.log.
Здесь используется Apache 2.2.16 в Debian GNU / Linux 6.0, но я также вижу то же самое в Ubuntu 12.04.2 LTS и MacOS 10.5 - я думаю, это стандартное поведение Apache2.
Я хочу, чтобы журнал моих сценариев mod_perl отображался в журнале ошибок конкретного сайта, как и ошибки 404 и другие ошибки уровня Apache. Как я могу это сделать?
Частично это решается переопределением warn
для ваших скриптов. STDERR
по-прежнему идет в основной журнал ошибок Apache.
- Во-первых, нам нужно использовать функцию логирования mod_perl вместо CORE :: warn
Либо замените warn на Apache2 :: ServerRec :: warn:
use Apache2::Log (); Apache2::ServerRec::warn("the code is smoking");
или импортируйте его в свой код:
use Apache2::ServerRec qw(warn); # override warn locally warn "the code is smoking";