web-dev-qa-db-fra.com

journalisation des erreurs nginx / php-fpm

J'essaie de comprendre où les erreurs PHP vont dans ma configuration. J'exécute nginx comme proxy inverse de PHP-FPM, mais je ne vois pas les divers - E_NOTICE ou E_WARNING messages produits par mon application. La seule raison pour laquelle je sais qu'ils se produisent est des réponses ayant échoué 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. Je ne me soucie pas vraiment où les erreurs finissent, juste qu'elles finissent quelque part .

Des indices sur la façon dont je pourrais faire fonctionner cela?

16
Jeremy Wilson

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
5
dmuir

Ê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
2
Otheus

Lorsque vous utilisez php-fpm, il semble remplacer le php.ini réglages.

La journalisation doit probablement être configurée dans .../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 se trouvent également dans ce fichier sous des lignes similaires à celles-ci (peuvent différer entre la configuration de socket et de 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 pense que le niveau de journalisation est toujours utilisé depuis php-fpm.conf vous devrez peut-être également vérifier cela.

log_level = error
1
EternalHour