Registro de errores nginx / php-fpm

16

Estoy tratando de averiguar a dónde van los errores de PHP en mi configuración. Estoy ejecutando nginx como el proxy inverso para PHP-FPM, pero no veo los diversos mensajes E_NOTICE o E_WARNING que mi aplicación está produciendo. La única razón por la que sé que están sucediendo es por respuestas fallidas y trazas de pila de captura de NewRelic.

Aquí está la configuración de registro:

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

He configurado PHP para iniciar sesión en syslog, sin embargo, FPM no tiene la función syslog, por lo que está iniciando sesión en un archivo. Realmente no me importa dónde terminan los errores, solo que terminan en algún lugar.

¿Alguna pista sobre cómo podría hacer que esto funcione?

Jeremy Wilson
fuente
Intentaría hacer que los errores se muestren primero (en un archivo test.php podría desencadenar un error manualmente), luego ponerlos en un archivo y así sucesivamente .... Podría haber errores desencadenados desde cli, por lo tanto, utilizando un php.ini diferente
adrian7
¿Intentaste esto? php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = on
Ghasem Pahlavan

Respuestas:

5

Según el archivo de configuración, FPM admite el envío de errores a syslog.

; 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
fuente
1

¿Está seguro de su suposición para rsyslog.conf? Es decir, ¿está seguro de que todos los mensajes de syslog están etiquetados con minúsculas "php"?

Intente configurar syslog.facility en algo como local2 (o local1 o local7) y reemplace su rsyslog.conf config-line en consecuencia:

local2.* /var/log/php-fpm/error.log
Oteo
fuente
1

Cuando usa php-fpm, parece anular la php.iniconfiguración.

Lo más probable es que sea necesario configurar el registro .../www.conf.

Descomenté estas líneas para obtener los registros de PHP.

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

El usuario y el grupo del servidor web también se pueden encontrar en este archivo en líneas similares a esta (pueden diferir entre la configuración de socket y proxy de Unix).

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

Entonces es solo cuestión de crear el archivo y configurarlo correctamente.

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

Creo que el nivel de registro todavía se usa, por php-fpm.conflo que es posible que también deba verificar esto.

log_level = error
Hora eterna
fuente