В настоящее время PHP не регистрирует ошибки, созданные из командной строки.
У меня есть:
log_errors = On
error_log = /var/log/php_errors.log
в/etc/php5/cli/php.ini
Я пропустил еще одну настройку, чтобы заставить это работать?
В настоящее время PHP не регистрирует ошибки, созданные из командной строки.
У меня есть:
log_errors = On
error_log = /var/log/php_errors.log
в/etc/php5/cli/php.ini
Я пропустил еще одну настройку, чтобы заставить это работать?
Убедитесь, что учетная запись пользователя, работающая с PHP CLI, имеет доступ на запись к /var/log/php_errors.log
.
Кроме того, вы можете убедиться, что используете правильный файл php.ini следующим образом:
php -a -c /etc/php5/cli/php.ini
Этот вопрос и ответ были очень полезны для меня при настройке регистрации CLI в среде Ubuntu 12.04, поэтому я хотел опубликовать ответ, который отдает то, что я узнал. В дополнение к большой информации, предоставленной David Chan
, а также George Cummins
, я создал logrotate.d
script, чтобы гарантировать, что журнал ошибок CLI PHP не выйдет из-под контроля, а также настройте его таким образом, чтобы несколько пользователей могли регистрировать ошибки в общем журнале ошибок CLI.
Во-первых, поведение по умолчанию для PHP CLI заключается в том, чтобы записывать сообщения об ошибках в стандартный вывод; вход в файл не является поведением по умолчанию. Обычно это означает ведение журнала на том же сеансе терминала командной строки, в котором выполняется команда CLI PHP. В то время как файл PHP ini имеет номера для указанного error_log
, необходимо добавить дополнительные места, чтобы действительно заставить его работать.
Сначала мне пришлось создать начальный файл php_errors.log
:
sudo touch /var/log/php_errors.log
Поскольку сервер, о котором идет речь, используется веб-разработчиками, работающими над различными проектами, я установил для них общую группу под названием www-users
. И в этом случае я хочу, чтобы php_errors.log
был доступен для чтения и записи на www-users
. Я изменяю право собственности на файл следующим образом:
sudo chown root:www-users /var/log/php_errors.log
И затем измените права доступа к этому файлу:
sudo chmod 664 /var/log/php_errors.log
Да, с точки зрения безопасности, имеющей файл журнала, доступный для чтения и доступный для записи кем-либо из www-users
, не так велик. Но это контролируемая совместная рабочая среда. Поэтому я доверяю пользователям уважать такие вещи. И кроме того, когда PHP запускается из CLI, любой пользователь, который может это сделать, будет нуждаться в записи доступа к журналам, чтобы даже получить запись в журнале.
Затем перейдите в /etc/php5/cli/php.ini
, чтобы настроить параметры Ubuntu 12.04 по умолчанию для соответствия этому новому файлу журнала:
sudo nano /etc/php5/cli/php.ini
Счастье log_errors
включено по умолчанию в Ubuntu 12.04:
log_errors = On
Но чтобы разрешить ведение журнала в файл, нам нужно изменить error_log
, чтобы он соответствовал новому файлу следующим образом:
error_log = /var/log/php_errors.log
logrotate.d
script.Теперь это должно быть так, но поскольку я не хочу, чтобы журналы заканчивались, я устанавливаю logrotate.d
для php_errors.log
. Создайте файл php-cli
в /etc/logrotate.d/
следующим образом:
sudo nano /etc/logrotate.d/php-cli
И разместите там содержимое этого лог-ротатора демона script:
/var/log/php_errors.log {
weekly
missingok
rotate 13
compress
delaycompress
copytruncate
notifempty
create 664 root www-users
sharedscripts
}
С этим сделаем тестовую установку с помощью David Chan
выше:
php -r "error_log('This is an error test that we hope works.');"
Если это правильно работает, вы должны просто вернуться к пустой командной строке, поскольку ошибки PHP CLI больше не отправляются на стандартный вывод. Поэтому проверьте фактическое php_errors.log
для тестового сообщения об ошибке следующим образом:
tail -n 10 /var/log/php_errors.log
И там должна быть строка с меткой времени, которая выглядит примерно так:
[23-Jul-2014 16:04:56 UTC] This is an error test that we hope works.
в качестве диагностики вы можете попытаться заставить запись в журнал ошибок таким образом.
php -c /etc/php5/cli/php.ini -r " error_log('test 123'); "
теперь вы должны увидеть тест 123 в своем журнале
tail /var/log/php_errors.log
Ведение журнала/отчетность PHP также зависит от error_reporting.
Некоторые фреймворки PHP (например, CodeIgniter) выполняют оператор error_reporting(E_STRICT)
или эквивалент, когда он находится в рабочем режиме, что значительно сократит количество/количество зарегистрированных ошибок.
Если вы хотите что-то отладить, вы можете просто поставить следующую инструкцию прямо перед кодом:
error_reporting(E_ALL);
Если вы не можете понять, почему или, возможно, не имеете прав пользователя на php.ini, другой способ отладки ошибки анализа без информации заключается в том, чтобы обернуть ваш php-источник в другой php-источник с помощью чего-то типа:
ini_set('display_errors',1);
error_reporting(E_ALL);
include "mybustedfile.php";
в файле PHP
error_log("You messed up!", 3, "/var/tmp/my-errors.log");
в терминале
tail -f /var/tmp/my-errors.log
Выход Вы испортились!