Метод 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