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?
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
Ê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
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