web-dev-qa-db-ja.com

nginx / php-fpmエラーログ

PHPエラーが私のセットアップで起こっている場所を見つけようとしています。PHP-FPMのリバースプロキシとしてnginxを実行していますが、さまざまなものが表示されません- E_NOTICEまたはE_WARNINGアプリが生成しているメッセージ発生していることがわかっている唯一の理由は、失敗した応答とNewRelicがスタックトレースをキャッチしていることです。

ロギング構成は次のとおりです。

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

Syslogにログを記録するようにPHP=を構成しましたが、FPMにはsyslog機能がないため、ファイルにログを記録しています。エラーがどこに到達するかは気にしません。 。

これを機能させる方法についての手がかりはありますか?

16
Jeremy Wilson

構成ファイルによると、FPMは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
5
dmuir

Rsyslog.confの想定について確信がありますか?つまり、そのようなすべてのsyslogメッセージに小文字の「php」のタグが付いていることを確認しますか?

Syslog.facilityをlocal2(またはlocal1、またはlocal7)などに設定し、それに応じてrsyslog.conf構成行を置き換えてみてください。

local2.* /var/log/php-fpm/error.log
2
Otheus

Php-fpmを使用している場合、php.ini設定を上書きするように見えます。

ほとんどの場合、ロギングは.../www.confで構成する必要があります。

PHPログを取得するために、これらの行のコメントを外しました。

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

Webサーバーのユーザーとグループは、このファイルのこのような行の下にもあります(UNIXソケットとプロキシ構成では異なる場合があります)。

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

その後は、ファイルを作成して適切に構成するだけです。

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

ログレベルはphp-fpm.confから引き続き使用されていると思うので、これも確認する必要があります。

log_level = error
1
EternalHour