протоколирование ошибок nginx / php-fpm

16

Я пытаюсь выяснить, где ошибки PHP в моей установке. Я использую nginx в качестве обратного прокси-сервера для PHP-FPM, но я не вижу различных сообщений E_NOTICE или E_WARNING, которые генерирует мое приложение. Единственная причина, по которой я знаю, что они происходят, это неудачные ответы и NewRelic, отслеживающие следы стека.

Вот лог конфигурации:

nginx.conf

proxy_intercept_errors on;
fastcgi_intercept_errors on;

php.ini

error_reporting  =  E_ALL
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = On
error_log = syslog

PHP-fpm.conf

[global]
error_log = /var/log/php-fpm/fpm-error.log

[www]
access.log = /var/log/php-fpm/access.log
access.format = "%t \"%m %r%Q%q\" %s %{mili}dms %{kilo}Mkb %C%%"
catch_workers_output = yes

php_flag[display_errors] = on
php_admin_flag[log_errors] = true

rsyslog.conf

:syslogtag, contains, "php" /var/log/php-fpm/error.log

Я настроил PHP для входа в системный журнал, однако в FPM нет функции системного журнала, поэтому он регистрируется в файл. Мне все равно, где заканчиваются ошибки, просто они где-то заканчиваются.

Любые подсказки о том, как я мог бы заставить это работать?

Джереми Уилсон
источник
Я бы попытался сначала отобразить ошибки (в файле test.php вы можете вручную вызвать ошибку), затем поместить их в файл и так далее .... Возможные ошибки могут быть получены из cli, поэтому используется другой php.ini
adrian7
Ты пробовал это? php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = on
Ghasem Pahlavan

Ответы:

5

В соответствии с конфигурационным файлом FPM поддерживает отправку ошибок в системный журнал.

; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; in a local file.
; Note: the default prefix is /var
; Default Value: log/php-fpm.log
error_log = syslog

; syslog_facility is used to specify what type of program is logging the
; message. This lets syslogd specify that messages from different facilities
; will be handled differently.
; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON)
; Default Value: daemon
;syslog.facility = daemon

; syslog_ident is prepended to every message. If you have multiple FPM
; instances running on the same server, you can change the default value
; which must suit common needs.
; Default Value: php-fpm
;syslog.ident = php-fpm

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice
dmuir
источник
1

Вы уверены в своем предположении о rsyslog.conf? То есть вы уверены, что все такие сообщения системного журнала помечены строчными буквами "php"?

Попробуйте установить syslog.facility что-то вроде local2 (или local1, или local7) и соответственно заменить строку конфигурации rsyslog.conf:

local2.* /var/log/php-fpm/error.log
Otheus
источник
1

Когда вы используете php-fpm, он переопределяет php.iniнастройки.

Ведение журнала, скорее всего, необходимо настроить в .../www.conf.

Я раскомментировал эти строки, чтобы получить логи PHP.

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

Пользователь и группа веб-сервера также могут быть найдены в этом файле в строках, аналогичных этим (могут отличаться в зависимости от конфигурации сокета Unix и конфигурации прокси).

listen.owner = www-data
listen.group = www-data

Тогда нужно просто создать файл и правильно его настроить.

touch /var/log/php-errors.log
chmod 644 /var/log/php-errors.log
chgrp www-data /var/log/php-errors.log
chown www-data /var/log/php-errors.log

Я считаю, что уровень журнала все еще используется, php-fpm.confпоэтому вам также может понадобиться проверить это.

log_level = error
EternalHour
источник