registrazione errori nginx / php-fpm


16

Sto cercando di capire dove stanno andando gli errori PHP nella mia configurazione. Sto eseguendo nginx come proxy inverso a PHP-FPM, ma non vedo i vari messaggi E_NOTICE o E_WARNING prodotti dalla mia app. L'unica ragione per cui so che stanno accadendo sono le risposte non riuscite e NewRelic che cattura tracce dello stack.

Ecco la configurazione di registrazione:

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

Ho configurato PHP per accedere a syslog, tuttavia FPM non ha alcuna funzione syslog quindi registra su un file. Non mi interessa davvero dove finiscono gli errori, solo che finiscono da qualche parte.

Qualche idea su come potrei farlo funzionare?


Vorrei provare a visualizzare prima gli errori (in un file test.php potresti innescare manualmente un errore), quindi inserirli in un file e così via .... Potrebbero essere generati errori da cli, quindi utilizzando un php.ini diverso
adrian7

Hai provato questo? php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = on
Ghasem Pahlavan

Risposte:


5

Secondo il file di configurazione FPM supporta l'invio di errori 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

1

Sei sicuro del tuo presupposto per rsyslog.conf? Cioè, sei sicuro che tutti questi messaggi syslog siano taggati con "php" minuscolo?

Prova a impostare syslog.facility su qualcosa di simile a local2 (o local1 o local7) e a sostituire di conseguenza la tua config-line rsyslog.conf:

local2.* /var/log/php-fpm/error.log

1

Quando si utilizza php-fpm, sembra sovrascrivere le php.iniimpostazioni.

Molto probabilmente è necessario configurare la registrazione .../www.conf.

Ho decommentato queste righe per afferrare i log di PHP.

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

L'utente e il gruppo del server web possono anche essere trovati in questo file in righe simili a questa (possono differire tra socket unix e configurazione proxy).

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

Quindi si tratta solo di creare il file e configurarlo correttamente.

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

Credo che il livello di registro sia ancora utilizzato, php-fpm.confquindi potrebbe essere necessario verificarlo.

log_level = error
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.