PHP-FPM не записывает в журнал ошибок

Я только что установил сервер nginx + php-fpm. Все кажется прекрасным, за исключением того, что PHP-FPM никогда не записывает ошибку в свой журнал.

fpm.conf

[default] listen = /var/run/php-fpm/default.sock listen.allowed_clients = 127.0.0.1 listen.owner = webusr listen.group = webusr listen.mode = 0666 user = webusr group = webusr pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.status_path = /php/fpm/status ping.path = /php/fpm/ping request_terminate_timeout = 30s request_slowlog_timeout = 10s slowlog = /var/log/php-fpm/default/slow.log chroot = /var/www/sites/webusr catch_workers_output = yes env[HOSTNAME] = mapsvr.mapking.com php_flag[display_errors] = on php_admin_value[error_log] = /var/log/php-fpm/default/error.log php_admin_flag[log_errors] = on 

nginx.conf

 server { listen 80 default_server; server_name _; charset utf-8; access_log /var/log/nginx/access.log rest; include conf.d/drops.conf.inc; location / { root /var/www/sites/webusr/htdocs; index index.html index.htm index.php; } # pass the PHP scripts to FastCGI server listening on socket # location ~ \.php$ { root /var/www/sites/webusr/htdocs; include /etc/nginx/fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /htdocs/$fastcgi_script_name; if (-f $request_filename) { fastcgi_pass unix:/var/run/php-fpm/default.sock; } } location = /php/fpm/status { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php-fpm/default.sock; } location = /php/fpm/ping { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php-fpm/default.sock; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } 

Я сделал ошибочный скрипт php и запустил его, а также посмотрел вывод ошибок в веб-браузере. Также журнал ошибок nginx устанавливает вывод stderr из fpm с тем же сообщением. Я проверяю, что пользователь имеет право на запись (я даже попробовал 777) на назначенную папку журнала. Даже указанный файл error.log был успешно создан php-fpm. Тем не менее, файл журнала всегда пуст, независимо от того, какая возмутительная ошибка была сделана из php-скрипта.

Что происходит?

[Нашел причину спустя некоторое время]

Это было разрешение. Измененный владелец пользователей сайта решил проблему.

Solutions Collecting From Web of "PHP-FPM не записывает в журнал ошибок"

Это сработало для меня:

 ; Redirect worker stdout and stderr into main error log. If not set, stdout and ; stderr will be redirected to /dev/null according to FastCGI specs. ; Default Value: no catch_workers_output = yes 

Редактировать:

Файл для редактирования – это файл, который настраивает нужный пул. По умолчанию: /etc/php-fpm.d/www.conf

Я долго боролся с этим, прежде чем найти журналы php-fpm, которые записывались в /var/log/upstart/php5-fpm.log . Кажется, это ошибка между тем, как взаимодействуют upstart и php-fpm. Подробнее см. Здесь: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595

У меня была аналогичная проблема, и мне пришлось сделать следующее в pool.d/www.conf

 php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on 

Он все еще не писал файл журнала, поэтому мне действительно нужно было создать его с помощью touch /var/log/fpm-php.www.log затем установить правильного владельца sudo chown www-data.www-data /var/log/fpm-php.www.log .

Как только это было сделано, и перезапущен php5-fpm, возобновление ведения журнала возобновилось.

Существует несколько конфигурационных файлов php, но это тот, который вам нужно изменить:

 /etc/php(version)?/fpm/pool.d/www.conf 

раскомментируйте строку, которая гласит:

 catch_workers_output 

Это позволит PHP stderr перейти в журнал ошибок php-fpm вместо / dev / null.

Я собрал идеи из кучи ответов здесь, и я представляю комплексное решение:

Итак, если вы устанавливаете nginx с php5-fpm и регистрируете сообщение с помощью error_log() вы можете увидеть его в /var/log/nginx/error.log по умолчанию.

Проблема может возникнуть, если вы хотите error_log(print_r($myArr, true)); много данных (например, массив), используя error_log(print_r($myArr, true)); , Если массив достаточно велик, кажется, что nginx урезает вашу запись в журнале.

Чтобы обойти это, вы можете настроить fpm для управления журналами. Вот шаги для этого.

  1. Откройте /etc/php5/fpm/pool.d/www.conf :

    $ sudo nano /etc/php5/fpm/pool.d/www.conf

  2. Раскомментируйте следующие две строки, удалив ; в начале строки:

    ;php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on

  3. Создать /var/log/fpm-php.www.log :

    $ sudo touch /var/log/fpm-php.www.log;

  4. Измените право собственности на /var/log/fpm-php.www.log чтобы php5-fpm мог его отредактировать:

    $ sudo chown vagrant /var/log/fpm-php.www.log

    Примечание: vagrant – это пользователь, которому я должен дать право собственности. Вы можете видеть, какой пользователь должен быть для вас, запустив $ ps aux | grep php.*www $ ps aux | grep php.*www и просматривая первый столбец.

  5. Перезапустить php5-fpm:

    $ sudo service php5-fpm restart

Теперь ваши журналы будут в /var/log/fpm-php.www.log .

В php-fpm из v5.3.9 и до сих пор есть ошибка https://bugs.php.net/bug.php?id=61045 (5.3.14 и 5.4.4). Разработчик обещал, что исправление пойдет вживую в следующей версии. Если вы не хотите ждать – используйте патч на этой странице и перестройте или откатите до 5.3.8.

в вашем файле fpm.conf вы не установили 2 переменную, которая предназначена только для регистрации ошибок

эти переменные являются error_log (путь к файлу вашего файла журнала ошибок) log_level (уровень регистрации ошибок)

; Файл журнала ошибок; Примечание: префикс по умолчанию: / usr / local / php / var; Значение по умолчанию: log / php-fpm.log

 error_log = log/php-fpm.log 

; Уровень журнала; Возможные значения: предупреждение, ошибка, предупреждение, уведомление, отладка; Значение по умолчанию: уведомление

 log_level = notice 

в моем случае я показываю, что журнал ошибок собирался /var/log/php-fpm/www-error.log . поэтому я прокомментировал эту строку в /etc/php-fpm.d/www.conf

 php_flag[display_errors] is commented php_flag[display_errors] = on log will be at /var/log/php-fpm/www-error.log 

и, как сказано выше, я также раскоментировал эту строку

 catch_workers_output = yes 

Теперь я могу видеть журналы в файле, указанном nginx.

Проверьте папку «PHP-FPM» владельца

Ты можешь сделать:

 ls -lah /var/log/php-fpm/ chown -R webusr:webusr /var/log/php-fpm/ chmod -R 777 /var/log/php-fpm/