2013-08-10 4 views
7

FastCGI не хочет правильно регистрировать ошибки PHP. Ну, это не совсем так: он записывает ошибки в порядке, с небольшим ворчанием; он просто ничего не записывает, например предупреждения.Nginx + FastCGI + PHP (php-fpm) не регистрирует пойманные ошибки/предупреждения

Печально известная ошибка журнала FastCGI -> Nginx не является проблемой, обязательно. Ошибки и предупреждения от php-fpm идут прямо к Nginx - но только если они не пойманы. То есть, если set_error_handler успешно перехватывает ошибку, запись в журнал не добавляется. Это означает, что я могу видеть ошибки разбора, но это все.

php-fpm не регистрирует ошибки PHP самостоятельно (отдельно от nginx) без какого-либо взлома. Файл конфигурации экземпляра PHP-FPM включает в себя эти две строки по умолчанию:

php_admin_value[error_log] = /mnt/log/php-fpm/default.log 
php_admin_flag[log_errors] = on 

Я изменил error_log путь, очевидно. Я должен добавить следующую строку, чтобы получить это на самом деле ничего войти:

php_admin_value[error_reporting] = E_ALL & ~E_DEPRECATED & ~E_STRICT 

Версия Примечание: E_STRICT часть не нужна, так как я использую PHP 5.3.27, но я планирую на модернизацию до 5.4 в некоторых точка. С помощью этой строки он регистрирует ошибки - и только ошибки - до /mnt/log/php-fpm/default.log. Теперь это устанавливает error_reporting в то же значение, которое я установил в php.ini, поэтому здесь что-то явно не так. Кроме того, он не регистрирует ошибки ловушки: поведение идентично поведению журнала nginx. Вместо этого я попытался использовать числовое значение (22527), но все равно не повезло.

Мне все равно, в каком файле журнала записываются записи (nginx versus php-fpm), но мне нужны пойманные ошибки, которые будут где-то зарегистрированы. Я мог бы прибегнуть к тому, чтобы вводить собственные ошибки и обработчики исключений, но это немного хаки, поэтому я бы предпочел избежать этого.

+1

ли я с ума, вспоминая, что Apache не имеют этой проблемы? – Zenexer

ответ

5

Я использую эту директиву в файле конфигурации пула для PHP-FPM:

catch_workers_output = yes

+1

У меня есть этот набор, но он все еще не регистрирует пойманные ошибки. – Zenexer

+0

@ Zenexer вы проверили разрешения на каталоги и файлы, используемые при регистрации? Вероятно, они должны принадлежать «root»; 'chmod 0755' в каталогах и' chmod 0644' на файлы. – parhamr

+0

Да, разрешения в порядке. Все принадлежит nginx и работает как nginx. Он пишет материал, только не все. Я думаю, что я просто ожидаю поведения, которое не должно быть выставлено. Apache делает то же самое. – Zenexer