कभी-कभी मानक बैकट्रेस/एरर मैसेज कॉम्बो पर्याप्त नहीं होता। कभी-कभी आपको एरर के कारण का पता लगाने के लिए अतिरिक्त डेटा की आवश्यकता होती है। सौभाग्य से, रूबी में यह करना बेहद आसान है।
एरर मैसेज कस्टमाइज़ करना
अपने एरर में प्रासंगिक जानकारी जोड़ने का सबसे सरल तरीका है उसे एक्सेप्शन के मैसेज में शामिल करना। नीचे दिए गए उदाहरण में मैं एक एक्सेप्शन पकड़ रहा हूँ और उसे एक नए मैसेज के साथ फिर से उठा रहा हूँ:
begin raise "foo" rescue => e raise e.class, "bar" end # RuntimeError: bar
इस दृष्टिकोण का एक अच्छा उपयोग मामला तब हो सकता है जब आप कोई टेम्पलेट रेंडर कर रहे हों। टेम्पलेट के अंदर होने वाला कोई भी एक्सेप्शन टेम्पलेट के फ़ाइलनाम को नहीं जानता। लेकिन डीबगिंग के दौरान आपके लिए यह जानकारी बहुत महत्वपूर्ण होती है।
यहाँ एक उदाहरण है कि कैसे आप टेम्पलेट एरर को रेस्क्यू कर सकते हैं और मैसेज में फ़ाइलनाम जोड़ सकते हैं।
filename = "mytemplate.erb" template = File.read(filename) # Contains "<% 1/0 %>" e = ERB.new(template) begin e.result rescue => e raise e.class, [filename, e.message].join(": ") end # ZeroDivisionError: mytemplate.erb: divided by 0
एक्सेप्शन रैप करना
एक्सेप्शन में प्रासंगिक जानकारी शामिल करने का एक अन्य विकल्प है एक कस्टम एक्सेप्शन बनाना। चूंकि रूबी में एक्सेप्शन भी अन्य चीजों की तरह क्लास होते हैं, आप इसमें जितने चाहें उतने attr_accessors जोड़ सकते हैं।
यह कुछ इस तरह दिख सकता है:
class TemplateError < StandardError attr_reader :filename def initialize(msg, filename) @filename = filename super(msg) end end begin ERB.new(template).result rescue => e raise TemplateError.new(e.message, filename) end
हनीबैजर के कॉन्टेक्स्ट फीचर का उपयोग
ठीक है, मुझे यह शामिल करना पड़ा, क्योंकि हनीबैजर के पास आपके एक्सेप्शन में प्रासंगिक जानकारी जोड़ने का एक बहुत ही शानदार तरीका है। एक्सेप्शन ऑब्जेक्ट को संशोधित करने के बजाय, आप बस अपने एप्लिकेशन में कहीं से भी Honeybadger.context मेथड का उपयोग करते हैं।
class ApplicationController .... def find_current_user user = ... Honeybadger.context(user_id: user.id, user_email: user.email, user.scope: "user") end end
जब कोई एक्सेप्शन होता है, तो कॉन्टेक्स्ट डेटा उसके साथ रिपोर्ट किया जाता है। फिर आप उस डेटा को हमारे वेब या मोबाइल ऐप्स में अन्य एक्सेप्शन डेटा के साथ देख सकते हैं।
हनीबैजर का कॉन्टेक्स्ट फीचर आपको बिना ज्यादा कोड लिखे अपने एक्सेप्शन में जो भी जानकारी चाहिए, उसे अटैच करने देता है।