2013-04-11 4 views
9

संतरी जैसे एक अपवाद के साथ जुड़े अतिरिक्त डेटा का पता लगाने कर सकते हैं:आप पाइथन अपवाद कैसे बढ़ाते हैं और सेंट्री के लिए अतिरिक्त डेटा शामिल करते हैं?

enter image description here

कैसे अपनी खुद की additional data क्षेत्रों के साथ आप अजगर (यह एक Django अनुप्रयोग है) से इस तरह के एक अपवाद बढ़ा है ?.

+0

'raise' किसी भी वर्ग या उदाहरण लेता है:

यहां एक संपूर्ण सरल उपयोग के मामले में है। क्या आप जो पूछ रहे हैं उसके बारे में आप स्पष्ट हो सकते हैं? –

+0

आप कौन सा अतिरिक्त डेटा जोड़ना चाहते हैं? – mgilson

+0

ऑफटॉपिक - लेकिन आपका स्क्रीनशॉट कहां से है? मैं django में इतने सुंदर अपवाद क्यों नहीं है? - संपादित करें: क्षमा करें, यह संत्री है। – user1688936

उत्तर

9

मैं logging पुस्तकालय का उपयोग करके अपवादों लॉग इन करें तो कोड थोड़ा डिबगिंग के बाद, मैं extra पैरामीटर देखा:

import logging 
logger = logging.getLogger('my_app_name') 

def do_something(): 

    try: 
     #do some stuff here that might break 

    except Exception, e: 
     logger.error(e, exc_info=1, extra={'extra-data': 'blah', }) 

पासिंग exc_info = 1 logger.exception कॉल करने जैसा ही है। हालांकि, exception() kwargs स्वीकार नहीं करता है, जो extra पैरामीटर का उपयोग करने के लिए आवश्यक हैं।

ये मान सेंट्री त्रुटि डैशबोर्ड के 'अतिरिक्त डेटा' अनुभाग में दिखाई देंगे।

+0

यह है। यदि आप रावेन क्लाइंट का उपयोग कर रहे हैं तो आप यह कर सकते हैं: ["इसे अपने अतिरिक्त खंड में डेटा के रूप में पास करें"] (http://raven.readthedocs.org/en/latest/config/logging.html) उदाहरण के लिए: logger.error ('कुछ पागल त्रुटि थी', exc_info = सही, अतिरिक्त = {'डेटा': {'उपयोगकर्ता नाम': request.user.username}}) ' – AJP

+1

यह वास्तव में प्रश्न का उत्तर नहीं देता है। 'logger.error (...) 'अपवाद को फिर से नहीं उठाएगा, इसलिए यह इसे निगल जाएगा और जारी रखेगा। आप वास्तव में अतिरिक्त डेटा के साथ अपवाद कैसे उठाएंगे? – dAnjou

1

आप इन दो तरीकों में से एक कोशिश कर सकते हैं:

>>> # Raise the exception with the data you want. 
>>> raise Exception('extra information') 
Traceback (most recent call last): 
    File "<pyshell#64>", line 1, in <module> 
    raise Exception('extra information') 
Exception: extra information 
>>> # Catch an exception and add extra arguments. 
>>> try: 
    raise Exception() 
except Exception as error: 
    error.args += ('extra information',) 
    raise 

Traceback (most recent call last): 
    File "<pyshell#68>", line 2, in <module> 
    raise Exception() 
Exception: extra information 
>>> 

आप और अधिक तर्क जोड़कर के रूप में आप चाहते हैं के रूप में कई अतिरिक्त डेटा फ़ील्ड जोड़ सकते हैं।

1

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

आप अतिरिक्त कीवर्ड तर्कों को .capture() पर पास करके अतिरिक्त फ़ील्ड जोड़ सकते हैं; उदाहरण के लिए request ऑब्जेक्ट में पास होने पर Django client आपके लिए ऐसा करता है।

वर्तमान में, अपवादों से कोई अन्य डेटा नहीं लिया जाता है। ऐसी सुविधा जोड़ने के लिए आपको अपवाद को संभालने के लिए अपवाद का विस्तार करना होगा।

1

wes' answer मुझे मदद नहीं की क्योंकि मैं करने के लिए वास्तव में चाहते हैं उठाने एक अपवाद है, केवल यह प्रवेश नहीं।

यहाँ मैं क्या किया है (client रेवेन संतरी ग्राहक है):

मौजूदा उत्तरों की
client.extra_context({'foo': 'bar'}) 
raise RuntimeError('Whoops, something went wrong!') 
0

किसी ने भी मेरे सटीक उपयोग के मामले में अच्छी तरह से सेवा की है (संतरी में Django Request वस्तु से अतिरिक्त संदर्भ जोड़ने के लिए था जो डेटा)। SENTRY_CLIENT setting का उपयोग कर कुछ खुदाई करने वाले क्लाइंट को ओवरराइड करने के बाद इसके लिए बहुत अच्छा काम करना समाप्त हो गया।

from raven.contrib.django.raven_compat import DjangoClient 

class CustomSentryClient(DjangoClient): 

    def get_data_from_request(self, request): 
     result = super(EToolsSentryClient, self).get_data_from_request(request) 
     if getattr(request, 'custom_field', None): 
      if 'extra' not in result: 
       result['extra'] = {} 
      result['extra']['custom_field'] = request.custom_field 
     return result 

और फिर settings.py में आप सिर्फ जोड़ना होगा

SENTRY_CLIENT = 'myapp.CustomSentryClient' 
संबंधित मुद्दे