На Apache2/mod_perl2, stderr вывод не переходит к файлу журнала, назначенному ErrorLog

Мне нравится поддерживать отдельные файлы журнала 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. Как я могу заставить это произойти?

4
задан 23 July 2013 в 16:18
1 ответ

Это частично решается переопределением предупреждения для ваших сценариев. STDERR по-прежнему попадает в основной журнал ошибок Apache.

Из Modperl docs :

  1. Во-первых, нам нужно использовать функцию ведения журнала mod_perl вместо CORE :: warn

Либо замените warn на Apache2 :: ServerRec :: warn:

 используйте Apache2 :: Log ();
Apache2 :: ServerRec :: warn («код курит»);
 

или импортируйте его в свой код:

 используйте Apache2 :: ServerRec qw (warn);  # переопределить предупреждение локально
предупредить «код курит»;
 
0
ответ дан 3 December 2019 в 04:26

Теги

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