การบันทึกข้อผิดพลาด nginx / php-fpm


16

ฉันพยายามที่จะหาข้อผิดพลาด PHP ที่เกิดขึ้นในการตั้งค่าของฉัน ฉันกำลังเรียกใช้ nginx ในฐานะ reverse proxy ของ PHP-FPM แต่ฉันไม่เห็นข้อความ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

ฉันได้กำหนดค่า PHP ให้เข้าสู่ระบบ syslog อย่างไรก็ตาม FPM ไม่มีฟังก์ชั่น syslog ดังนั้นจึงเข้าสู่ไฟล์ ฉันไม่สนใจว่าข้อผิดพลาดจะจบลงแค่ไหน

เบาะแสใด ๆ เกี่ยวกับวิธีที่ฉันจะทำให้มันทำงาน


ฉันจะลองแสดงข้อผิดพลาดก่อน (ในไฟล์ test.php คุณสามารถเรียกข้อผิดพลาดด้วยตนเอง) จากนั้นใส่พวกเขาในไฟล์และอื่น ๆ ... อาจเป็นข้อผิดพลาดที่เกิดจาก cli ดังนั้นการใช้ php.ini ที่แตกต่างกัน
adrian7

คุณลองนี่ไหม php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = on
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 config-line ของคุณตามลำดับ:

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.