nginx / php-fpm Fehlerprotokollierung

16

Ich versuche herauszufinden, wohin die PHP-Fehler in meinem Setup führen. Ich verwende Nginx als Reverse-Proxy für PHP-FPM, sehe aber nicht die verschiedenen E_NOTICE- oder E_WARNING- Nachrichten, die meine App erzeugt. Der einzige Grund, warum ich weiß, dass sie passieren, sind fehlgeschlagene Antworten und NewRelic, die Stack-Traces abfangen.

Hier ist die Protokollierungskonfiguration:

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

Ich habe PHP so konfiguriert, dass es sich in Syslog anmeldet, aber FPM hat keine Syslog-Funktion, so dass es sich in eine Datei anmeldet. Es ist mir eigentlich egal, wo die Fehler landen, nur dass sie irgendwo landen.

Gibt es Hinweise, wie ich das zum Laufen bringen könnte?

Jeremy Wilson
quelle
Ich würde versuchen, Fehler zuerst anzeigen zu lassen (in einer test.php-Datei könnten Sie manuell einen Fehler auslösen), dann sie in eine Datei zu setzen und so weiter .... Könnten Fehler ausgelöst werden, die von cli stammen, also eine andere php.ini verwenden
adrian7 13.08.15
Hast du das probiert? php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = on
Ghasem Pahlavan

Antworten:

5

Laut der Konfigurationsdatei unterstützt FPM das Senden von Fehlern an 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
quelle
1

Sind Sie sich Ihrer Annahme für die rsyslog.conf sicher? Sind Sie sicher, dass alle derartigen Syslog-Nachrichten mit Kleinbuchstaben "php" gekennzeichnet sind?

Versuchen Sie, syslog.facility auf so etwas wie local2 (oder local1 oder local7) zu setzen und Ihre Konfigurationszeile rsyslog.conf entsprechend zu ersetzen:

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

Wenn Sie php-fpm verwenden, scheint es, die php.iniEinstellungen zu überschreiben .

Die Protokollierung muss höchstwahrscheinlich in konfiguriert werden .../www.conf.

Ich habe diese Zeilen auskommentiert, um die PHP-Protokolle zu erfassen.

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

Der Webserver-Benutzer und die Gruppe finden Sie auch in dieser Datei unter ähnlichen Zeilen (kann sich zwischen der Unix-Socket- und Proxy-Konfiguration unterscheiden).

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

Dann geht es nur noch darum, die Datei zu erstellen und richtig zu konfigurieren.

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

Ich glaube, die Protokollstufe wird immer noch von verwendet, php-fpm.confdaher müssen Sie dies möglicherweise auch überprüfen.

log_level = error
Ewige Stunde
quelle