मैं एक फ़ाइल में त्रुटियों और चेतावनियों को कैसे लॉग कर सकता हूँ?


233

मैं सभी त्रुटि और चेतावनियों को कैसे चालू करूं और उन्हें एक फ़ाइल में लॉग इन करूं, लेकिन स्क्रिप्ट के भीतर उस सब को सेट करने के लिए (php.ini में कुछ भी नहीं बदल रहा है)?

मैं एक फ़ाइल नाम को परिभाषित करना चाहता हूं और ताकि सभी त्रुटियां और चेतावनियां इसमें लॉग इन हो जाएं।

जवाबों:


358

निम्नलिखित कोड का उपयोग करें:

ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );

फिर फ़ाइल देखें:

tail -f /tmp/php-error.log

या 2008 से इस ब्लॉग प्रविष्टिphp.ini में वर्णित के रूप में अद्यतन करें


41
ini_setकेवल उस कोड को निष्पादित करने पर काम करता है। उस कोड के लिए उपयोगी नहीं है जिसमें पार्स त्रुटियां हैं क्योंकि कोड निष्पादित होने से पहले त्रुटि होगी । इसके बजाय उन परिवर्तनों को php.ini में लिखें।
हकरे

9
आप संपादित php.ini नहीं कर सकते हैं, तो आप .htaccess में जोड़ने के लिए सक्षम होना चाहिए: php_flag log_errors on php_value error_log /home/path/public_html/domain/PHP_errors.log। देखें perishablepress.com/...
माथीउ

1
मेरे पास एक प्रश्न है, कैसे मेरे htdocs फ़ोल्डर में बनाने के लिए error.log फ़ाइल प्राप्त करें?
टॉमी

मुझे लगता है कि आप केवल उस फ़ोल्डर को बदल सकते हैं tmp/php-error.logजिसमें से आप कभी भी इच्छा रखते हैं?
ल्यूक

यह मेरे PHP को 5.4.0
Supuhstar

94

देख

  • error_log - कहीं एक त्रुटि संदेश भेजें

उदाहरण

error_log("You messed up!", 3, "/var/tmp/my-errors.log");

जब भी कोई त्रुटि या चेतावनी या आपको लॉग इन करने की आवश्यकता होती है, तो आप इस फ़ंक्शन को कॉल करने के लिए अपने स्वयं के त्रुटि हैंडलर्स के साथ त्रुटि हैंडलिंग को अनुकूलित कर सकते हैं । अतिरिक्त जानकारी के लिए, कृपया PHP मैनुअल में अध्याय एरर हैंडलिंग को देखें


42

बस अपनी पीएचपी / इंडेक्स फाइल के शीर्ष पर ये कोड डालें:

error_reporting(E_ALL); // Error/Exception engine, always use E_ALL

ini_set('ignore_repeated_errors', TRUE); // always use TRUE

ini_set('display_errors', FALSE); // Error/Exception display, use FALSE only in production environment or real server. Use TRUE in development environment

ini_set('log_errors', TRUE); // Error/Exception file logging engine.
ini_set('error_log', 'your/path/to/errors.log'); // Logging file path

4
केवल तभी यदि आप यह भी चाहते हैं कि लॉगिंग के अलावा सभी त्रुटियां आउटपुट और / या ब्राउज़र में प्रदर्शित हों । display_errorsकभी भी लाइव प्रोडक्शन सर्वर पर चालू नहीं होना चाहिए - यह निर्देश विशेष रूप से उपयोगकर्ता के लिए आउटपुट के लिए है, और लॉगिंग पर कोई प्रभाव नहीं है। php.net/manual/en/…
आरोन वॉलेंटाइन

22

इस कोड को .htaccess ( php.ini / ini_set फ़ंक्शन के विकल्प के रूप में ) जोड़ें:

<IfModule mod_php5.c>
php_flag log_errors on 
php_value error_log ./path_to_MY_PHP_ERRORS.log
# php_flag display_errors on 
</IfModule>

* जैसा कि टिप्पणी की गई है: यह अपाचे- टाइप सर्वरों के लिए है, न कि नग्नेक्स या अन्य के लिए।


7
यह विशेष रूप से अपाचे के PHP मॉड्यूल के साथ करना है।
सैक्रेडस्कूल

9

यह मेरा व्यक्तिगत लघु कार्य है

# logging
/*
[2017-03-20 3:35:43] [INFO] [file.php] Here we are
[2017-03-20 3:35:43] [ERROR] [file.php] Not good
[2017-03-20 3:35:43] [DEBUG] [file.php] Regex empty

mylog ('hallo') -> INFO
mylog ('fail', 'e') -> ERROR
mylog ('next', 'd') -> DEBUG
mylog ('next', 'd', 'debug.log') -> DEBUG file debug.log
*/
function mylog($text, $level='i', $file='logs') {
    switch (strtolower($level)) {
        case 'e':
        case 'error':
            $level='ERROR';
            break;
        case 'i':
        case 'info':
            $level='INFO';
            break;
        case 'd':
        case 'debug':
            $level='DEBUG';
            break;
        default:
            $level='INFO';
    }
    error_log(date("[Y-m-d H:i:s]")."\t[".$level."]\t[".basename(__FILE__)."]\t".$text."\n", 3, $file);
}

6

log_errorsPhp.ini में कॉन्फ़िगरेशन विकल्प पर एक नज़र डालें । यह वही करना चाहता है जो आप करना चाहते हैं। मुझे लगता है कि आप error_logअपनी लॉगिंग फ़ाइल को भी सेट करने के लिए विकल्प का उपयोग कर सकते हैं ।

जब log_errorsनिर्देश सेट किया जाता है On, तो PHP द्वारा रिपोर्ट की गई कोई भी त्रुटि सर्वर लॉग या फ़ाइल के साथ निर्दिष्ट की जाएगी error_log। आप इन विकल्पों को ini_setभी सेट कर सकते हैं, यदि आपको आवश्यकता है।

(कृपया ध्यान दें कि display_errorsअगर यह विकल्प सक्षम है तो php.ini में अक्षम होना चाहिए)


1
display_errorsयदि आप सक्षम करते हैं तो विकलांग क्यों होना चाहिए log_errors? मेरी राय में कोई मतलब नहीं है। :)
गुइडो हेंड्रिक्स

5
क्योंकि उत्पादन सर्वर पर जनता को त्रुटियों की सामग्री को आउटपुट करने की आवश्यकता नहीं है, खासकर यदि त्रुटि का पाठ एक फाइल में सावधानीपूर्वक लॉग इन किया जा रहा है।
शब्बीट्रेट

3
प्रदर्शन त्रुटियों को हमेशा उत्पादन सर्वर पर अक्षम किया जाना चाहिए। नहीं अगर त्रुटि लॉगिंग कहीं और कॉन्फ़िगर किया गया है, लेकिन हमेशा। त्रुटियों को डिफ़ॉल्ट रूप से अपाचे त्रुटि लॉग में लॉग किया जाता है, जो अक्सर पर्याप्त होता है।
पिहान

1
उत्पादन पर त्रुटियों को प्रदर्शित करना PHP को अधिक लोकप्रिय बनाता है :)
पीटर 10

0

इसके अलावा, आपको काम करने के लिए "AllowOverride विकल्प" निर्देश की आवश्यकता है। (अपाचे २.२.१५)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.