Python Exceptions Logging -


आईएम वर्तमान में एक कार्यक्रम के अपवाद को लॉगिंग के माध्यम से ...

  def log_message (पाठ ): Log_file = "/var/log/logfile.txt" कोशिश: अगर os.path.isfile (log_file): मोड = "a" else: mode = "w" ओपन (log_file, mode) के रूप में myfile: myfile ई: प्रिंट "त्रुटि:", ई रिटर्न गलत प्रयास: ... अपवाद को छोड़कर कुछ कोड ई: log_message ("त्रुटि:% s"%) के रूप में अपवाद को छोड़कर सच को वापस ("% s \ n"% (text) (ई))   

हालांकि मेरे लॉग को मैं "typeError" प्राप्त करता हूं: 'NoneType' प्रकार का तर्क 'iterable' नहीं है "क्या नीचे की तरह अपवाद से दूसरी जानकारी भी लॉग इन करने का कोई तरीका है? जैसे कि लाइन नंबर, मॉड्यूल फ़ाइल इत्यादि?

  & gt; & gt; & gt; Post_builder_ghost (abc) .generate () ट्रेसबैक (सबसे हाल ही में कॉल अंतिम): फ़ाइल "& lt; stdin & gt;", पंक्ति 1, & lt; मॉड्यूल & gt; यदि 'youtube' से self.video: TypeError में उत्पन्न होता है, तो फ़ाइल 'post_builder.py', रेखा 34, 'NoneType' प्रकार के तर्क को पुनरावृत्त नहीं है & gt; & gt; & gt;   

धन्यवाद,

सीधे अपने प्रश्न का उत्तर: देखो

लेकिन ...

आपको एक नजर रखना चाहिए ()। आपका कोड बन जाएगा (इसमें सबसे सरल रूप में):

  आयात लॉगिंग लॉगिंग। BasicConfig (स्ट्रीम = ओपन ("/ var / log / logfile.txt", "a +")) LOG = logging .getlogger (__ नाम__) कोशिश करते हैं: ... अपवाद को छोड़कर कुछ कोड ई: LOG.exception ("आपने क्या किया है मानव पठनीय स्पष्टीकरण")   

जैसा कि बताया गया है, यह सबसे आसान तरीका है लॉगिंग का आप इस से बहुत अधिक मिल सकते हैं! निजी तौर पर, मैं के विरुद्ध basicConfig को सलाह दूंगा। लेकिन आपको जल्दी से चलने के लिए यह ठीक काम करेगा।

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

यह भी आप का समर्थन करता है, जैसे मॉड्यूल का नाम लॉग करना, फ़ाइल नाम और पंक्ति संख्या, लेकिन यह डिफ़ॉल्ट रूप से अक्षम है आप अपना खुद का संदेश प्रारूप निर्दिष्ट करके इसे सक्षम कर सकते हैं (देखें फ़ील्ड के संदर्भ के लिए):

  logging.basicConfig (stream = open ("/ var / log / logfile.txt", "A +"), format = "% (levelname) s:% (name) s:% (pathname) s:% (lineno) s:% (message) s)   

मैंने जो ऊपर इस्तेमाल किया है LOG.exception विधि में स्टैक ट्रेस शामिल होगा (जो कि आप चाहते थे)। आपके पास अन्य विधियों ( .debug , .info , .warning , .error , .critical ) जो केवल संदेश काट डालेगा।

अंगूठे के नियम के रूप में, आप अपने आवेदन में लॉगिंग सिस्टम जितनी जल्दी हो सके को कॉन्फ़िगर करना चाहते हैं, यदि संभव हो तो अन्य पुस्तकालयों के साथ हस्तक्षेप से बचने के लिए मॉड्यूल स्तर पर ऐसा न करें। यदि यह एक कंसोल एप्लीकेशन है, तो "एंट्री पॉइंट्स" (या <__name <__name__ == '__main __' ब्लॉक

) को कॉन्फ़िगर करने में (या तो मैन्युअल रूप से, या < Code> basicConfig ), तो आप इसे अपने प्रत्येक मॉड्यूल में डाल सकते हैं:

  आयात लॉगिंग LOG = logging.getLogger (__ नाम__)   

जो उस मॉड्यूल को समर्पित एक लॉगर ( LOG ) देगा और बाद में (भी रन-टाइम पर) प्रति मॉड्यूल लॉगिंग (उदाहरण के लिए वृद्धि / घटाएँ) को कॉन्फ़िगर करने में सक्षम बनाता है।

Comments

Popular posts from this blog

Java - Error: no suitable method found for add(int, java.lang.String) -

java - JPA TypedQuery: Parameter value element did not match expected type -

c++ - static template member variable has internal linkage but is not defined -