Rejestrowanie błędów nginx / php-fpm

16

Próbuję dowiedzieć się, dokąd idą błędy PHP w mojej konfiguracji. Używam nginx jako odwrotnego proxy do PHP-FPM, ale nie widzę różnych komunikatów E_NOTICE lub E_WARNING, które generuje moja aplikacja. Jedynym powodem, dla którego wiem, że się zdarzają, są nieudane odpowiedzi i ślady stosu NewRelic.

Oto konfiguracja logowania:

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

Skonfigurowałem PHP do logowania do syslog, jednak FPM nie ma funkcji syslog, więc loguje się do pliku. Naprawdę nie dbam o to, gdzie błędy się kończą, tylko o to, że gdzieś się kończą.

Jakieś wskazówki, jak mogę to uruchomić?

Jeremy Wilson
źródło
Spróbuję najpierw wyświetlić błędy (w pliku test.php można ręcznie wywołać błąd), a następnie umieścić je w pliku i tak dalej ... Możliwe, że błędy zostaną wywołane z cli, a więc przy użyciu innego php.ini
adrian7
Próbowałeś tego? php_admin_value [dziennik_błędu] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = włączony
Ghasem Pahlavan

Odpowiedzi:

5

Zgodnie z plikiem konfiguracyjnym FPM obsługuje wysyłanie błędów do 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
źródło
1

Czy jesteś pewien swoich założeń dotyczących pliku rsyslog.conf? Czy na pewno wszystkie takie wiadomości syslog są oznaczone małymi literami „php”?

Spróbuj ustawić syslog.facility na coś takiego jak local2 (lub local1 lub local7) i odpowiednio zamień linię konfiguracyjną rsyslog.conf:

local2.* /var/log/php-fpm/error.log
Otheus
źródło
1

Gdy używasz php-fpm, wydaje się, że zastępuje php.iniustawienia.

Logowanie najprawdopodobniej wymaga konfiguracji .../www.conf.

Odkomentowałem te linie, aby pobrać dzienniki PHP.

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

W tym pliku można również znaleźć użytkownika i grupę serwera WWW w liniach podobnych do tego (może różnić się w zależności od konfiguracji gniazda i proxy Unix).

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

Następnie wystarczy tylko utworzyć plik i odpowiednio go skonfigurować.

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

Uważam, że poziom logowania jest nadal używany, php-fpm.confwięc może być konieczne sprawdzenie tego.

log_level = error
EternalHour
źródło