डिबग लॉग कैसे प्रिंट करें?


129

मैं कुछ PHP कोड डीबग करना चाहूंगा, लेकिन मुझे लगता है कि स्क्रीन या फ़ाइल पर लॉग प्रिंट करना मेरे लिए ठीक है।

मुझे PHP कोड में लॉग कैसे प्रिंट करना चाहिए?

सामान्य print/ printfHTML कंसोल पर जाना प्रतीत होता है कंसोल नहीं।

मेरे पास अपाचे सर्वर है जो PHP कोड को निष्पादित करता है।


क्या आपकी स्क्रिप्ट वेब ब्राउज़र में चल रही है या कंसोल में है (उर्फ अपाचे / आईआईएस के बजाय php.exe का उपयोग करके पार्स किया गया है)?
danielrsmith

आपको इस प्रश्न को देखना चाहिए, उपयोगी लॉगिंग कोड का एक सा है: stackoverflow.com/questions/5769537/…
बेन

आप किस भाषा से आ रहे हैं? बस इतना है कि आप php बहुत अलग है तो अन्य संकलित भाषाओं
Ibu

1
@ लब्बू: वास्तव में .. मुझे उम्मीद नहीं थी, printfइस सवाल से कई परेशानियाँ उठेंगी ...
यूजीन

error_log ($ स्ट्रिंग);
Thewebus

जवाबों:


186

एक कम ज्ञात चाल है कि mod_php नक्शे अपाचे लॉग को stderr। और, इसके लिए एक धारा है, इसलिए अपाचे त्रुटि लॉग file_put_contents('php://stderr', print_r($foo, TRUE))के मूल्य को अच्छी तरह से डंप करेगा $foo


1
+ यह उल्लेख करने के लिए oned कि, btw आप एक कंसोल ऐप को डीबग करते समय error_log का मान 'php: // stdout' पर भी सेट कर सकते हैं और त्रुटि संदेश सीधे कंसोल पर दिखाई देते हैं, अर्थात: error_log ("आपने गड़बड़ कर दी!", 3 , "php: // stdout");
स्टेफगॉसलिन

4
+1 यह उत्तर खोजने में मुझे बहुत लंबा समय लगा। यह सब मैं वास्तव में देख रहा था। मैं यह नहीं पता लगा सका कि मेरे सरणी में क्या है (द्रुपाल में काम करते हुए)।
स्टीव्स

मैं var_export($foo, true)इसके बजाय print_r($foo, true)यदि print_rआपको आवश्यक प्रकार की जानकारी नहीं मिलती है तो मैं इसका उपयोग करने का सुझाव दूंगा ।
बेन

क्या वह error_log (Print_r ($ foo)) के समान नहीं होगा; ?
ब्रूनिस


26

आप अपने सर्वर त्रुटि लॉग फ़ाइल (या यदि आप चाहें तो एक वैकल्पिक दूसरी फ़ाइल भेजने के लिए error_log का उपयोग कर सकते हैं )


21

यदि आप लिनक्स पर हैं:

file_put_contents('your_log_file', 'your_content');

या

error_log ('your_content', 3, 'your_log_file');

और फिर कंसोल में

tail -f your_log_file

यह फाइल में लास्ट लाइन को लगातार दिखाएगा।


9

आपको अपने मन के फ्रेम को बदलने की जरूरत है। आप PHP लिख रहे हैं, बाकी कुछ भी नहीं है जो आप लिखने के लिए उपयोग किया जाता है। PHP में डीबगिंग कंसोल वातावरण में नहीं किया जाता है।

PHP में, आपके पास डीबगिंग समाधानों की 3 श्रेणियां हैं:

  1. एक वेबपेज के लिए आउटपुट (चीजों के अच्छे दृष्टिकोण के लिए डीबग लाइब्रेरी देखें)।
  2. लॉग फ़ाइल में लिखें
  3. XDebug के साथ सत्र डीबगिंग में

PHP का उपयोग करने की कोशिश करने के बजाय उन लोगों का उपयोग करना सीखें जो आप जिस अन्य भाषा के लिए उपयोग किए जाते हैं।


31
जैसा कि बहुत समय सांत्वना ऐप और विभिन्न गैर-वेब स्क्रिप्ट लिखने में खर्च होता है , मैं उससे विनम्रतापूर्वक असहमत हूं।
स्टेफगोसेलिन

मैं सांत्वना अनुप्रयोगों को बनाए रखने और विकसित करने में बहुत काम करता हूं और मेरे प्रश्न की खराब अंग्रेजी व्याख्या ने मान लिया था कि वह एक कंसोल ऐप को डीबग करना चाहता था। Xdebug ठीक है और बहुत आसान है, हालांकि मैं अपने संपादक में सही
stefgosselin

1
@Stefgosselin: Netbeans बहुत ज्यादा वही करता है, हालाँकि मैंने जो सबसे अच्छा xDebug के साथ देखा है वह Aptana के साथ था।
सिल्वरड्रेग

1
मैं Netbeans पर xDebug का उपयोग करता हूं और यह ज्यादातर समय ठीक रहता है। लेकिन, ऐसे समय होते हैं जब आपको किसी फ़ाइल पर सामान लॉग करने की आवश्यकता होती है।
cosan

ये भी कोशिश करो..तुम और अधिक करने में सक्षम हो जाएगा! stackoverflow.com/a/44050914/2053479
गणेश

5

क्या आप कंसोल पर डिबगिंग कर रहे हैं? PHP डीबग करने के लिए विभिन्न विकल्प हैं। त्वरित और गंदे डिबगिंग के लिए उपयोग किया जाने वाला सबसे आम कार्य var_dump है

यह कहा जा रहा है और रास्ते से बाहर है, हालांकि var_dump बहुत बढ़िया है और बहुत सारे लोग बस उसी के साथ सब कुछ करते हैं, ऐसे अन्य उपकरण और तकनीकें हैं जो इसे थोड़ा मसाला कर सकती हैं।

वेबपेज में डिबगिंग करने में मदद करने के लिए चीजें, <pre> </pre>आपके डंप स्टेटमेंट के चारों ओर टैग लपेटें ताकि आपको सरणियों और वस्तुओं पर उचित स्वरूपण दिया जा सके।

अर्थात:

<div> some html code ....
      <a href="<?php $tpl->link;?>">some link to test</a>
</div>

      dump $tpl like this:

    <pre><?php var_dump($tpl); ?></pre>

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

error_reporting(E_ALL);
ini_set('display_errors', '1');

सौभाग्य!


2

यदि आप Zend जैसे ढांचे को एकीकृत नहीं करना चाहते हैं , तो आप php त्रुटि लॉग में लॉग करने के लिए trig_error विधि का उपयोग कर सकते हैं ।


2

बस तरीका है ट्रिगर_रोर:

 trigger_error("My error");

लेकिन आप सरणियाँ या ऑब्जेक्ट नहीं डाल सकते इसलिए उपयोग करें

var_dump

trig_error शायद आपकी त्रुटि लॉग में लिखने का सबसे अच्छा तरीका है। जब आप बाद में कुछ कस्टम डेटा वाली लॉग लाइनों को संशोधित करना चाहते हैं तो आप खुद को धन्यवाद देंगे।
अंशुल

2

आप इस तरह से एक फ़ाइल भी लिख सकते हैं:

$logFilePath = '../logs/debug.text';
ob_start();

// if you want to concatenate:
if (file_exists($logFilePath)) {
    include($logFilePath);
}
// for timestamp
$currentTime = date(DATE_RSS);

// echo log statement(s) here
echo "\n\n$currentTime - [log statement here]";

$logFile = fopen($logFilePath, 'w');
fwrite($logFile, ob_get_contents());
fclose($logFile);
ob_end_flush();

सुनिश्चित करें कि उचित अनुमतियाँ सेट हैं, ताकि php फ़ाइल ( 775) तक पहुंच और लिख सके ।


1

आप http://liveoutput.com/ पर कॉल करने के लिए php कर्ल मॉड्यूल का उपयोग कर सकते हैं । यह एक सुरक्षित, कॉर्पोरेट वातावरण में बहुत अच्छा काम करता है जहाँ php.ini में कुछ प्रतिबंध मौजूद हैं जो इसके उपयोग को प्रतिबंधित करता है file_put_contents


1

डीबगिंग और लॉगिंग php: PHp डीबगर और लॉगर के लिए यह एक महान उपकरण है

यह कोड के सिर्फ 3 लाइनों के साथ बॉक्स के ठीक बाहर काम करता है। यह ajax डीबगिंग के लिए js कंसोल को संदेश भेज सकता है और त्रुटि हैंडलर को बदल सकता है। यह var_dump () और print_r () जैसे चरों के बारे में भी जानकारी देता है, लेकिन अधिक पठनीय प्रारूप में। बहुत अच्छा उपकरण!


1

मैंने इनमें से कई का उपयोग किया है, लेकिन चूंकि मुझे आमतौर पर विकसित होने पर डिबग करने की आवश्यकता होती है, और जब से मैं स्थानीयहोस्ट पर विकसित होता हूं, मैंने दूसरों की सलाह का पालन किया है और अब ब्राउज़र के जावास्क्रिप्ट डिबग कंसोल ( http: //www.codeforest देखें) को लिखता हूं । नेट / डिबगिंग-php-in-browser-जावास्क्रिप्ट-कंसोल )।

इसका मतलब है कि मैं वेब पेज को देख सकता हूं जो मेरे PHP मेरे ब्राउज़र में उत्पन्न हो रहा है और किसी भी डीबग ट्रेस को जल्दी से दिखाने / छिपाने के लिए F12 दबाएं।

चूंकि मैं डिबगर, सीएसएस लेआउट आदि के लिए डेवलपर टूल को लगातार देख रहा हूं, इसलिए यह मेरे PHP लोगो को देखने के लिए समझ में आता है।

अगर कोई भी हमें उस कोड को तय नहीं करता है, तो मैंने एक मामूली बदलाव किया है। उपरांत

function debug($name, $var = null, $type = LOG) {

मैंने कहा

$name = 'PHP: ' . $name;

ऐसा इसलिए होता है क्योंकि मेरा सर्वर साइड PHP HTML को जावास्क्रिप्ट जावास्क्रिप्ट बनाता है और मुझे PHP और JS से आउटपुट के बीच अंतर करना उपयोगी लगता है।

(नोट: मैं वर्तमान में इसे अपडेट कर रहा हूं ताकि मुझे अलग-अलग आउटपुट प्रकारों को चालू और बंद करने की अनुमति मिल सके: PHP से, JS और डेटाबेस एक्सेस से)


1

मैं केक का उपयोग करता हूं इसलिए मैं उपयोग करता हूं:

$this->log(YOUR_STRING_GOES_HERE, 'debug');

0

आप उपयोग कर सकते हैं:

<?php
echo '<script>console.log("debug log")</script>';
?>

2
यह बहुत उपरि है। एक साधारण त्रुटि आउटपुट के लिए जावास्क्रिप्ट क्यों आमंत्रित करें?
घड़ी में

-8

आप उपयोग कर सकते हैं

<?php
{
    AddLog("anypage.php","reason",ERR_ERROR);
}
?>

या यदि आप उस कथन को एक लॉग में प्रिंट करना चाहते हैं जिसका आप उपयोग कर सकते हैं

AddLog("anypage.php","string: ".$string,ERR_DEBUG_LOW);

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