Мне нравится поддерживать отдельные файлы журнала 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 скрипты, которые испускают их собственные сообщения входа (использующий печать для STDERR, например), те сообщения все еще появляются в глобальном журнале ошибок Apache2, /var/log/apache2/error.log.
Это использует Apache 2.2.16 на GNU/Linux Debian 6.0, но я также вижу то же самое на Ubuntu 12.04.2 LTS и на MacOS 10.5 - я предполагаю, что это - стандартное поведение Apache2.
Я хочу, чтобы вход моих mod_perl сценариев появился в сайт-специфичном журнале ошибок точно так же, как 404 с и другие погрешности нивелировки Apache. Как я могу заставить это произойти?
Это частично решается переопределением предупреждения
для ваших сценариев. STDERR
по-прежнему попадает в основной журнал ошибок Apache.
Из Modperl docs :
- Во-первых, нам нужно использовать функцию ведения журнала mod_perl вместо CORE :: warn
Либо замените warn на Apache2 :: ServerRec :: warn:
используйте Apache2 :: Log (); Apache2 :: ServerRec :: warn («код курит»);
или импортируйте его в свой код:
используйте Apache2 :: ServerRec qw (warn); # переопределить предупреждение локально предупредить «код курит»;