log de erro nginx / php-fpm

16

Estou tentando descobrir para onde estão indo os erros do PHP na minha instalação. Estou executando o nginx como proxy reverso do PHP-FPM, mas não estou vendo as várias mensagens E_NOTICE ou E_WARNING que meu aplicativo está produzindo. A única razão pela qual sei que eles estão acontecendo são as respostas com falha e o NewRelic capturando rastreamentos de pilha.

Aqui está a configuração de log:

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

Eu configurei o PHP para efetuar logon no syslog, no entanto, o FPM não possui função syslog, portanto, ele está acessando um arquivo. Eu realmente não me importo onde os erros acabam, apenas que eles acabam em algum lugar.

Alguma pista de como eu poderia fazer isso funcionar?

Jeremy Wilson
fonte
Eu tentaria fazer com que os erros fossem exibidos primeiro (em um arquivo test.php, você poderia acionar manualmente um erro), depois os colocaria em um arquivo e assim por diante .... Poderia ser erros desencadeados são de cli, usando assim um php.ini diferente
adrian7
Você tentou isso? php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = on
Ghasem Pahlavan

Respostas:

5

De acordo com o arquivo de configuração, o FPM suporta o envio de erros ao 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
fonte
1

Você tem certeza de sua suposição para o rsyslog.conf? Ou seja, você tem certeza de que todas essas mensagens syslog estão marcadas com "php" em minúsculas?

Tente definir syslog.facility como algo local2 (ou local1 ou local7) e substitua sua linha de configuração do rsyslog.conf de acordo:

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

Quando você está usando php-fpm, ele parece substituir as php.iniconfigurações.

Provavelmente, o log precisa estar configurado .../www.conf.

Eu descomentei essas linhas para pegar os logs do PHP.

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

O usuário e o grupo do servidor da web também podem ser encontrados neste arquivo em linhas semelhantes a esta (podem diferir entre soquete unix e configuração de proxy).

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

Depois, basta criar o arquivo e configurá-lo corretamente.

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

Eu acredito que o nível de log ainda é usado, php-fpm.confentão você também pode precisar verificar isso.

log_level = error
EternalHour
fonte