अजगर में, प्रिंट के बजाय लॉगिंग का उपयोग क्यों करें?


96

एक जटिल परियोजना में सरल डिबगिंग के लिए प्रिंट के बजाय अजगर लॉगर का उपयोग करने का एक कारण है? अन्य उपयोग-मामलों के बारे में क्या? क्या प्रत्येक के लिए एक स्वीकृत सर्वोत्तम उपयोग-मामला है (विशेषकर जब आप केवल स्टडआउट की तलाश में हैं)?

मैंने हमेशा सुना है कि यह एक "सर्वोत्तम अभ्यास" है, लेकिन मैं यह पता लगाने में सक्षम नहीं हूं कि क्यों।


4
बड़ी परियोजनाओं के लिए लॉगिंग हमेशा एक "सर्वोत्तम अभ्यास" होता है क्योंकि आप इसे आसानी से चालू या बंद कर सकते हैं, और अधिक या कम जानकारी प्राप्त कर सकते हैं। प्रिंट न तो इन लाभों में से एक है।
क्रिस एबरले 20

1
देखें अर्थात ब्लॉग .plus1.com
index.php/

3
मुझे नहीं लगता कि इसके लिए कभी सबसे अच्छा उपयोग मामला है print
एकलकरण

5
अजगर प्रवेश प्रलेखन कहते हैं के लिए सबसे अच्छा उपयोग के मामले printमें एक कमांड लाइन आवेदन में उपयोगकर्ता के लिए मदद संदेश प्रदर्शित करने के लिए है।
मलिन बस्ती

इन सभी उत्तरों को पढ़ते हुए, मैं उल्टा सवाल पूछना चाहता हूं: क्या कभी लॉगिंग का उपयोग नहीं करने का कोई कारण है ?
information_interchange

जवाबों:


105

लॉगिंग पैकेज में बहुत सारी उपयोगी विशेषताएं हैं:

  • यह देखने के लिए आसान है कि कहां और कब (यहां तक ​​कि क्या लाइन नं।) एक लॉगिंग कॉल से किया जा रहा है।
  • आप एक ही समय में फ़ाइलों, सॉकेट्स, बहुत अधिक कुछ भी लॉग इन कर सकते हैं।
  • आप गंभीरता के आधार पर अपने लॉगिंग को अलग कर सकते हैं।

प्रिंट इनमें से कोई भी नहीं है।

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


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

23

उचित लॉगिंग का सबसे बड़ा लाभ यह है कि आप संदेशों को वर्गीकृत कर सकते हैं और उन्हें अपनी आवश्यकता के आधार पर चालू या बंद कर सकते हैं। उदाहरण के लिए, प्रोजेक्ट के एक निश्चित भाग के लिए डिबगिंग स्तर संदेशों को चालू करना उपयोगी हो सकता है, लेकिन इसे अन्य भागों के लिए नीचे टोन करें, ताकि सूचना अधिभार द्वारा न ली जाए और आसानी से उस कार्य पर ध्यान केंद्रित किया जा सके जिसके लिए आपको आवश्यकता है लॉगिंग।

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


3
फ़ाइलों को आउटपुट भेजने के लिए निश्चित रूप से +1। पोस्टमार्टम में एक लॉगफाइल को पार्स करना त्रुटि को खोजने के लिए एक खुली कंसोल विंडो में फिर से ब्रेक लगाने की तुलना में बेहतर है। मूल रूप से, एक लकड़हारा किसी भी समय के लिए आदर्श होता है जब आपको असफल होने के बजाय स्क्रिप्ट को डिबग करने की आवश्यकता होती है। यह किसी भी समय आपको एक जटिल समस्या को दूर करने के लिए आदर्श है, जिसके लिए आपको प्रोग्राम आउटपुट का विश्लेषण करना होगा। मूल रूप से, किसी भी समय आप त्रुटियों के साथ काम कर रहे हैं जो सिंटैक्स त्रुटियों को जटिल करता है, एक लकड़हारा शायद आपके लिए इसे सरल करेगा।
Jonathanb

11

प्रिंट बयान दोनों दुनिया के सबसे खराब प्रकार के होते हैं , नैदानिक ​​इंस्ट्रूमेंटेशन के साथ एक ऑनलाइन डिबगर के नकारात्मक पहलुओं को मिलाते हैं। आपको कार्यक्रम को संशोधित करना होगा लेकिन आपको इससे अधिक, उपयोगी कोड नहीं मिलेगा ।

एक ऑनलाइन डिबगर आपको एक चालू कार्यक्रम की स्थिति का निरीक्षण करने की अनुमति देता है; लेकिन असली डिबगर के बारे में अच्छी बात यह है कि आपको स्रोत को संशोधित करने की आवश्यकता नहीं है; डीबगिंग सत्र के पहले या बाद में न तो; आप बस डिबगर में प्रोग्राम लोड करते हैं, डिबगर को बताएं कि आप कहां देखना चाहते हैं, और आप सभी सेट हैं।

एप्लिकेशन को इंस्ट्रूमेंट करना कुछ काम को आगे ले जा सकता है, स्रोत कोड को किसी तरह से संशोधित कर सकता है, लेकिन परिणामी नैदानिक ​​आउटपुट में बड़ी मात्रा में विस्तार हो सकता है, और इसे बहुत विशिष्ट डिग्री पर या बंद किया जा सकता है। अजगर लॉगिंग मॉड्यूल न केवल लॉग किए गए संदेश को दिखा सकता है, बल्कि फ़ाइल और फ़ंक्शन भी कह सकता है, जो एक ट्रेसबैक है यदि एक, वास्तविक समय जो संदेश उत्सर्जित किया गया था, और इसी तरह। उस से भी अधिक; नैदानिक ​​इंस्ट्रूमेंटेशन को कभी भी हटाने की आवश्यकता नहीं है; यह कार्यक्रम समाप्त होने और उत्पादन में वैसा ही मान्य और उपयोगी है जैसा कि इसे जोड़ा गया दिन था; लेकिन यह हो सकता है कि यह एक लॉग फ़ाइल में अटका हुआ आउटपुट हो जहाँ यह किसी को परेशान करने की संभावना नहीं है, या लॉग स्तर को सभी लेकिन सबसे जरूरी संदेशों को बाहर रखने के लिए ठुकरा दिया जा सकता है।

डिबगर की आवश्यकता या उपयोग की आशंका वास्तव में आपके परीक्षण के दौरान आईपिथॉन का उपयोग करने से अधिक कठिन नहीं है, और यह पीडीडी डिबगर में निर्मित नियंत्रण के लिए उपयोग किए जाने वाले कमांड से परिचित हो रहा है।

जब आप अपने आप को यह सोचते हुए पाते हैं कि एक प्रिंट स्टेटमेंट pdb का उपयोग करने से आसान हो सकता है (जैसा कि अक्सर होता है), तो आप पाएंगे कि लॉगर का उपयोग करने से आपके प्रोग्राम को राज्य में काम करने के लिए बहुत आसान हो जाता है जैसे कि आप उपयोग करते हैं और बाद में प्रिंट स्टेटमेंट निकालते हैं। ।

मैंने अपने संपादक को वाक्यविन्यास त्रुटियों के रूप में प्रिंट स्टेटमेंट को हाइलाइट करने के लिए कॉन्फ़िगर किया है , और बयानों को टिप्पणी के रूप में लॉग कर रहा है, क्योंकि मैं उनके बारे में कैसे मानता हूं।


4

यदि आप लॉगिंग का उपयोग करते हैं तो परिनियोजन के लिए जिम्मेदार व्यक्ति कस्टम जानकारी के साथ इसे कस्टम स्थान पर भेजने के लिए लॉगर को कॉन्फ़िगर कर सकता है। यदि आप केवल प्रिंट करते हैं, तो यह सब उन्हें मिलता है।


1

लॉगिंग अनिवार्य रूप से अन्य मेटा डेटा (टाइमस्टैम्प, लैगवेल, लाइन नंबर, प्रक्रिया आदि) के साथ प्रिंट आउटपुट का खोजा सादा पाठ डेटाबेस बनाता है।

यह शुद्ध सोना है, मैं अजगर फ़ाइल चलाने के बाद लॉग फ़ाइल पर egrep चला सकता हूं । मैं अपने egrep पैटर्न खोज को धुन सकता हूं कि मैं वास्तव में क्या दिलचस्पी रखता हूं और बाकी को अनदेखा कर सकता हूं। परीक्षण और त्रुटि के बाद मेरे अहंकार पैटर्न को लेने के लिए संज्ञानात्मक भार और स्वतंत्रता की यह कमी मेरे लिए महत्वपूर्ण लाभ है।

tail -f mylogfile.log | egrep "key_word1|key_word2"

अब अन्य ठंडी चीजों में फेंक दें जो प्रिंट नहीं कर सकते हैं (सॉकेट में भेजना, डिबग स्तर सेट करना, लॉगोट्रेट करना, मेटा डेटा जोड़ना आदि), आपके पास सादे प्रिंट स्टेटमेंट पर लॉगिंग पसंद करना हर कारण है।

मैं प्रिंट स्टेटमेंट्स का उपयोग करता हूं क्योंकि यह आलसी और आसान है, लॉगिंग को कुछ बॉयलर प्लेट कोड की आवश्यकता होती है, अरे हमारे पास yasnippets (emacs) और अल्टिसनिप्स (vim) और अन्य टेम्प्लेटिंग टूल हैं, इसलिए सादे प्रिंट स्टेटमेंट के लिए लॉगिंग क्यों दें !?

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