В настоящее время 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
чтобы гарантировать, что журнал ошибок CLI PHP не будет выходить из-под контроля, а также установить это, чтобы несколько пользователей могли log ошибок в общий журнал ошибок CLI.
Во-первых, поведение по умолчанию PHP CLI заключается в том, чтобы записывать сообщения об ошибках в стандартный вывод; вход в файл не является поведением по умолчанию. Обычно это означает ведение журнала на том же сеансе терминала командной строки, в котором выполняется команда CLI PHP. В то время как у файла PHP ini есть номера для указанного error_log
необходимо добавить дополнительные места, чтобы действительно заставить его работать.
Во-первых, мне пришлось создать исходный файл php_errors.log
:
sudo touch /var/log/php_errors.log
Поскольку сервер, о котором идет речь, используется веб-разработчиками, работающими над различными проектами, у меня есть общая группа для них, называемых www-users
. И в этом случае я хочу, чтобы php_errors.log
был 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
. Теперь это должно быть так, но поскольку я не хочу, чтобы журналы заканчивались из-под контроля, я установил logrotate.d
для php_errors.log
. Создайте файл php-cli
/etc/logrotate.d/
в /etc/logrotate.d/
следующим образом:
sudo nano /etc/logrotate.d/php-cli
И разместите там содержимое этого скрипта демона журнала:
/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_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
выход Вы перепутали!