2011-01-29 20 views
22
try: 
    print blah 
except KeyError: 
    traceback.print_exc() 

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

import logging 
... 

logger = logging.getLogger("blabla") 
... 

try: 
    print blah # You can use logger.debug("blah") instead of print 
except KeyError: 
    logger.exception("An error occurred") 

यह स्टैक ट्रेस प्रिंट होगा और अपाचे के साथ काम करेंगे:

उत्तर

41

आप अजगर की लॉगिंग तंत्र का उपयोग कर सकते हैं।

+0

यह वास्तव में पूरे ट्रेसबैक को लॉग करता है? – TIMEX

+6

हाँ, पूर्ण स्टैक ट्रेस। प्रलेखन से: "Logger.exception() Logger.error() के समान लॉग संदेश बनाता है। अंतर यह है कि Logger.exception() इसके साथ एक स्टैक ट्रेस डंप करता है।" यह दस्तावेज़ीकरण का लिंक है - http://docs.python.org/library/logging.html – Lin

+0

लॉग कहां से सहेजा जाता है? आपने लॉगर = logging.getLogger ('bla') परिभाषित किया है, लेकिन क्या यह एक विशिष्ट निपुणता को सहेजता है? एक फ़ाइल या डेटाबेस? – TIMEX

7

यदि आप Django के ट्रंक संस्करण (या इसे रिलीज़ होने पर 1.3) चला रहे हैं, तो कई डिफ़ॉल्ट लॉगिंग कॉन्फ़िगरेशन हैं जिनमें पाइथन के मानक लॉगिंग मॉड्यूल के साथ एकीकृत किया गया है। इसके लिए, आपको केवल import logging पर जाना है, logger = logging.getLogger(__name__) पर कॉल करें और फिर logger.exception(msg) पर कॉल करें और आपको अपना संदेश और स्टैक ट्रेस दोनों मिलेंगे। Django's logging functionality और Python's logger.exception method के लिए डॉक्स आसान संदर्भ होंगे।

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

संबंधित मुद्दे

 संबंधित मुद्दे