Метод PHP error_log не записывает ошибки в файл журнала ошибок

Метод error_log PHP не записывает ошибки в файл журнала пользовательских ошибок. Он будет записывать только в /var/log/apache 2/php_error.log

Вот настройки регистрации в моем php.ini:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
display_errors = Off
log_errors = On
log_errors_max_len = 0 ; also tried with 9999999
error_log = /var/log/apache2/php_errors.log

PHP записывает свои ошибки в обычный журнал ошибок Apache (/var/log/apache2/error.log), а не тот, который указан выше.

Вещи, которые я уже пробовал:

  • Я остановил и перезапустил apache после изменения файла php.ini
  • Файл /var/log/apache2/php_errors.log - это 777 разрешений и файл существует.
  • Других перегружающих файлов php.ini нет. (Есть/etc/php5/cli/php.ini, но я не использую cli).
  • Других настроек error_log = xxx еще нет в файле php.ini, которые могут отменить первый
  • phpinfo() говорит error_log =/var/log/apache2/php_errors.log(т.е. правильный файл), как под локальным значением, так и с основным значением
  • Тест script Я использую для генерации ошибок, не содержит никаких вызовов ini_set

(FYI: Я использую Apache/2.2.17 и PHP/5.3.5-1ubuntu7.2 на Ubuntu 11.04)

Что я делаю неправильно?

Ответы

Ответ 1

Я бы хотел ответить на этот вопрос, поскольку это высокий результат в Google, хотя это старый вопрос.

Я решил это, добавив права на запись для всех пользователей в каталоге журнала.

В моем случае пользователь "http" должен был иметь возможность писать в /var/log/httpd/, поэтому я побежал

# chmod a+w /var/log/httpd

Если файл уже существует, это может помочь сначала удалить его и позволить Apache его создавать.

Мой файл php.ini также содержал весь путь.

error_log = /var/log/httpd/php_errors.log

Ответ 2

Вы можете попробовать указать имя файла следующим образом:

Я использую Apache 2.2.22 на Ubuntu.

Используйте эту команду PHP:

error_log("eric", 3, "/home/el/error.log");

Первый параметр - это сообщение, которое должно быть отправлено в журнал ошибок. Второй параметр 3 означает "ожидать назначения имени файла". Третий параметр - это назначение.

Создайте файл /home/el/error.log и установите его право собственности на это:

[email protected]:~$ ll error.log
-rwxrwxr-x 1 www-data www-data 7 Dec 13 14:30 error.log

Когда PHP интерпретирует метод error_log, он добавляет сообщение в ваш файл.

Источник: http://www.php.net/manual/en/function.error-log.php

Ответ 3

удалите php_errors.log и перезапустите apache2, сам сервер создаст новый файл php_errors.log с соответствующим разрешением и владельцем.

rm -f /var/log/apache2/php_errors.log
service apache2 restart

ll /var/log/apache2/php_errors.log

Ответ 4

Вы можете установить файл журнала ошибок для сайта в файле конфигурации сайта VirtualHost, например: /etc/apache2/sites-enabled/example.com.conf:

<VirtualHost *:80>

  ....

  ErrorLog ${APACHE_LOG_DIR}/www.example.com-error.log
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/www.example.com-access.log combined

</VirtualHost>

В системе unix ${APACHE_LOG_DIR} обычно /var/log/apache2 Ошибки и доступ будут сохранены в ${APACHE_LOG_DIR}/www.example.com-error.log и ${APACHE_LOG_DIR}/www.example.com-access.log.

Ответ 5

Сегодня я провел несколько часов, пытаясь понять, почему это не работает, и пытается отладить код, работая вокруг того, что я могу записывать что-либо в журнал ошибок php. Излишне говорить, что я шел по улитки, пока я не заработал каротаж.

Я бы предположил, что более 90% времени это проблема разрешения. В моем случае демон был владельцем и группой для файла журнала, и мне пришлось sudo su выполнить root, а затем изменить разрешения файла журнала. Я изменил на:

chmod 777 myphperror.log

Слава Богу для stackoverflow.com