journalisation des erreurs nginx / php-fpm

16

J'essaie de comprendre où vont les erreurs PHP dans ma configuration. J'exécute nginx comme proxy inverse de PHP-FPM, mais je ne vois pas les différents messages E_NOTICE ou E_WARNING que mon application produit. La seule raison pour laquelle je sais qu'ils se produisent est des réponses échouées et des traces de pile de capture NewRelic.

Voici la configuration de la journalisation:

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

J'ai configuré PHP pour se connecter à syslog, mais FPM n'a pas de fonction syslog donc il se connecte à un fichier. Peu m'importe où les erreurs se terminent, juste qu'elles se retrouvent quelque part.

Avez-vous des indices sur la façon dont cela pourrait fonctionner?

Jeremy Wilson
la source
Je voudrais essayer de faire afficher les erreurs en premier (dans un fichier test.php, vous pouvez déclencher manuellement une erreur), puis les mettre dans un fichier et ainsi de suite .... Les erreurs déclenchées peuvent provenir de cli, utilisant ainsi un autre php.ini
adrian7
Avez-vous essayé cela? php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = on
Ghasem Pahlavan

Réponses:

5

Selon le fichier de configuration, FPM prend en charge l'envoi d'erreurs à 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
la source
1

Êtes-vous sûr de votre hypothèse pour le rsyslog.conf? Autrement dit, êtes-vous sûr que tous ces messages Syslog sont marqués avec "php" en minuscules?

Essayez de définir syslog.facility sur quelque chose comme local2 (ou local1 ou local7) et remplacez votre ligne de configuration rsyslog.conf en conséquence:

local2.* /var/log/php-fpm/error.log
Otheus
la source
1

Lorsque vous utilisez php-fpm, il semble remplacer les php.iniparamètres.

La journalisation doit probablement être configurée .../www.conf.

J'ai décommenté ces lignes afin de récupérer les journaux PHP.

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

L'utilisateur et le groupe du serveur Web peuvent également être trouvés dans ce fichier sous des lignes similaires à celles-ci (peuvent différer entre la configuration de socket et proxy Unix).

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

Il suffit ensuite de créer le fichier et de le configurer correctement.

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

Je crois que le niveau de journalisation est toujours utilisé php-fpm.conf, vous devrez donc peut-être également vérifier cela.

log_level = error
EternalHour
la source