Почему мои выходные данные Apache2::Log заменяют символы новой строки на ?
Вопрос
Я настроил несколько виртуальных хостов под apache2/mod_perl.Я использовал ErrorLog
директива для получения отдельного журнала ошибок для каждого виртуального хоста.Это работало так, как ожидалось, только когда я использовал Apache2::Log.«Предупреждать» будет записываться только в обычный журнал ошибок.
Так что все работает.Окончательно.Но осталась одна проблема:Когда я регистрируюсь через $r->log_error, я обнаруживаю, что новые строки заменяются на \n
Есть идеи, почему это происходит и как это можно исправить?
Спасибо.
Решение
Это проблема не mod_perl, а проблемы Apache.По-видимому, существуют некоторые проблемы с безопасностью при печати неэкранированного вывода в журналах ошибок (я не совсем понимаю, почему), поэтому вам необходимо явно включить это в Apache при его сборке/настройке, используя это:
CFLAGS=-DAP_UNSAFE_ERROR_LOG_UNESCAPED ./configure
Если вы используете уже установленный Apache, вы мало что можете сделать, чтобы это изменить.
Другие советы
Если у вас есть предварительно созданная установка, вы можете использовать эту строку кода, чтобы устранить проблему, но она должна быть включена в каждое выполнение страницы на вашем виртуальном хосте, например, в файле header.php или config.php.
ini_set('error_log','/var/log/apache2/error.log');
я знаю, что это очень старая тема, но она все еще занимает первое место в результатах Google, поэтому, чтобы помочь всем, мне помогли следующие изменения в mod_perl.pl:
прокомментируйте ниже:
BEGIN { *CORE::GLOBAL::warn = \&Apache2::ServerRec::warn; }
вышеизложенное предназначено для:Сделайте так, чтобы предупреждения попадали в журнал виртуального хоста, а не в основной журнал сервера.
надеюсь, это поможет кому-то вроде меня :)