nginx / php-fpm त्रुटि लॉगिंग


16

मैं यह पता लगाने की कोशिश कर रहा हूं कि मेरे सेटअप में PHP की गलतियां कहां जा रही हैं। मैं nginx को 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 फ़ाइल में आप मैन्युअल रूप से एक त्रुटि को ट्रिगर कर सकते हैं), फिर उन्हें एक फ़ाइल में डाल दें और इसलिए ...। हो सकता है कि त्रुटियां ट्रिगर की गई हों, इस प्रकार एक अलग php.ini का उपयोग कर
एड्रियन

क्या आपने यह कोशिश की? php_admin_value [error_log] = /var/log/php-fpm/www-error.log php_admin_flag [log_errors] = पर
घासेम पहलवान

जवाबों:


5

Config फाइल के अनुसार 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" के साथ टैग किया गया है?

स्थानीय 2 (या लोकल 1, या लोकल 7) जैसी किसी चीज़ के लिए syslog.facility सेट करने का प्रयास करें और अपने 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.