nginx / php-fpm 오류 로깅


16

설정에서 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 기능이 없으므로 파일에 로깅됩니다. 나는 오류가 어디에서 끝나는 지 신경 쓰지 않고 단지 어딘가에서 끝나게됩니다.

어떻게 작동하는지에 대한 단서가 있습니까?


먼저 오류를 표시하려고 시도합니다 (test.php 파일에서 수동으로 오류를 트리거 할 수 있음). 그런 다음 파일에 넣으십시오 ... 트리거 오류가있을 수 따라서 다른 php.ini의 사용, CLI에서입니다
adrian7

이것을 시도 했습니까? php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = 켜기
Ghasem Pahlavan

답변:


5

구성 파일에 따르면 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

1

rsyslog.conf에 대한 가정이 확실합니까? 즉, 그러한 모든 syslog 메시지가 소문자 "php"로 태그되어 있습니까?

syslog.facility를 local2 (또는 local1 또는 local7)와 같은 것으로 설정하고 rsyslog.conf 구성 줄을 적절히 바꾸십시오.

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

1

php-fpm을 사용하면 php.ini설정 을 재정의하는 것처럼 보입니다 .

로깅은에서 구성해야합니다 .../www.conf.

PHP 로그를 얻기 위해이 줄의 주석 처리를 제거했습니다.

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

웹 서버 사용자와 그룹은이 파일에서 이와 비슷한 줄로 찾을 수 있습니다 (유닉스 소켓과 프록시 구성이 다를 수 있음).

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.