2012-11-08 10 views
5

मैंने एक फ़ंक्शन log_error (अनुरोध, ट्रेसबैक) बनाया है, जिसे मैं अपने अपवादों में कॉल करता हूं। यह डेटाबेस को त्रुटि जानकारी लिखता है। अब, इससे पहले कि मैं अपने विचारों में से प्रत्येक को खोलूं और इसे अपवाद हैंडलर में जोड़ूं, क्या कोई फ़ंक्शन में स्वचालित रूप से सभी अपवादों को बढ़ाने का कोई तरीका है, जो इसे कॉल करता है?पायथन/Django: अपवाद होने पर स्वचालित रूप से लॉग इन करें, अनुरोध जानकारी सहित

मैंने यह Python error logging देखा है, जो sys.excepthook का अपना संस्करण लिखने के लिए कहता है। अपवाद होने पर यह फ़ंक्शन स्वचालित रूप से कॉल किया जाता है। मैंने यह कोशिश की, लेकिन my_excepthook को कॉल नहीं किया गया था, भले ही मैंने views में समाधान को कॉपी किया और एक त्रुटि उठाई। हालांकि, मैंने बहुत मेहनत की कोशिश नहीं की क्योंकि मुझे वैसे भी सारी जानकारी नहीं मिल रही है, जिसकी मुझे आवश्यकता है। मुझे अनुरोध की भी आवश्यकता है ताकि मैं उपयोगकर्ता, यूआरएल इत्यादि के बारे में जानकारी लॉग कर सकूं

शायद यह बहुत ज्यादा पूछ रहा है?

(मैं Django का उपयोग कर रहा हूं, लेकिन यह Django- विशिष्ट चीज़ की तरह प्रतीत नहीं होता है) संपादित करें: हाँ, यह है।

+0

'sys.excepthook' केवल अनचाहे अपवादों के लिए बुलाया जाता है, या जो उनके हैंडलर द्वारा फिर से उठाए जाते हैं - यही कारण है कि जब आप इसे आजमाते थे तो यह काम नहीं करता था। अधिकांश भाग के लिए केवल एक ही जानकारी है जो इसे तर्क के रूप में पारित किया जाता है। आप कहीं भी अतिरिक्त जानकारी स्टोर कर सकते हैं और वहां अपना संस्करण वहां देख सकते हैं। – martineau

+0

[Django सभी अनचाहे अपवादों की रिपोर्ट करने के लिए कॉन्फ़िगर किया जा सकता है] (https://docs.djangoproject.com/en/dev/howto/error-reporting/) – jfs

+0

@ जेएफ। सेबस्टियन। त्रुटि तरीका काम करता है। मैंने एक समाधान लिखा था। धन्यवाद। – user984003

उत्तर

3

जेएफ सेबस्टियन के सुझाव ने काम किया। यह एक Django समाधान है।

settings.py MIDDLEWARE_CLASSES में:

(।। मुझे यकीन है नहीं करता है, तो यह सही है या होगा लाइन नीचे त्रुटियों का कारण अब के लिए काम करता है पिछले एक के रूप में यह जोड़ा)

'myapp.middleware.ExceptionMiddleware', 

में myapp.middleware.py:

import traceback 
class ExceptionMiddleware(object): 
    def process_exception(self, request, exception): 
     log_error(traceback, request) 

यही है। log_error मेरा कार्य है और डेटाबेस को लिखता है। यह प्रलेखन https://docs.djangoproject.com/en/dev/howto/error-reporting/ से भी प्रतीत होता है कि मैं स्थानीय चर के साथ-साथ अनुरोध विशेषताओं को भी प्राप्त कर सकता हूं।

+0

क्या आप कृपया साझा कर सकते हैं, आपका log_error फ़ंक्शन कैसे कार्यान्वित किया गया है? क्या आप अनुरोध करते हैं। एमएमटीए और दो टेक्स्टफिल्ड्स (मॉडल। टेक्स्टफिल्ड) दोनों के रूप में ट्रेसबैक? धन्यवाद – SpiXel

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