कभी-कभी मानक बैकट्रैक/त्रुटि संदेश कॉम्बो पर्याप्त नहीं होता है। त्रुटि के कारण का पता लगाने के लिए कभी-कभी आपको अतिरिक्त डेटा की आवश्यकता होती है। सौभाग्य से, रूबी में करना बहुत आसान है।
त्रुटि संदेश को अनुकूलित करना
अपनी त्रुटियों में प्रासंगिक जानकारी जोड़ने का सबसे आसान तरीका इसे अपवाद के संदेश में जोड़ना है। नीचे दिए गए उदाहरण में मैं एक अपवाद को पकड़ रहा हूं और इसे एक नए संदेश के साथ फिर से बढ़ा रहा हूं:
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 जोड़ सकते हैं।
यहां बताया गया है कि यह कैसा दिख सकता है:
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
जब कोई अपवाद होता है, तो उसके साथ संदर्भ डेटा की सूचना दी जाती है। फिर आप हमारे वेब या मोबाइल ऐप में डेटा को अन्य अपवाद डेटा के साथ देख सकते हैं।
Honeybadger की संदर्भ विशेषता आपको बिना किसी कोड के अपने अपवादों के लिए जो भी जानकारी चाहिए, संलग्न करने देती है।