registro de erro nginx / php-fpm

15

Estou tentando descobrir onde estão os erros do PHP na minha configuraçã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 eu sei que eles estão acontecendo são respostas com falha e NewRelic detectando rastreamentos de pilha.

Aqui está a configuração do registro:

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 logar ao syslog, no entanto, o FPM não tem nenhuma função syslog, então está registrando em um arquivo. Eu realmente não me importo onde os erros acabam, só que eles acabam em algum lugar.

Alguma pista de como eu posso fazer isso funcionar?

    
por Jeremy Wilson 12.02.2014 / 01:32

3 respostas

4

De acordo com o arquivo de configuração, o FPM suporta o envio de erros para o 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
    
por 02.07.2014 / 15:52
1

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

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

local2.* /var/log/php-fpm/error.log
    
por 13.04.2015 / 14:52
0

Quando você está usando o php-fpm, ele parece substituir as configurações de php.ini .

O registro provavelmente precisa ser configurado em .../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 grupo do servidor web também podem ser encontrados neste arquivo em linhas similares a esta (podem diferir entre a configuração de proxy e soquete unix).

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

Então é só uma questão de 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 a partir de php-fpm.conf , então você também pode precisar verificar isso.

log_level = error
    
por 03.04.2018 / 05:33