কখনো কখনো স্ট্যান্ডার্ড ব্যাকট্রেস / এরর মেসেজ কম্বো পর্যাপ্ত নয়। কখনো কখনো আপনাকে একটি এররের কারণ লোকেট করতে অতিরিক্ত ডেটা দরকার হয়। خوشবর্তমান, রুবিতে এটি করা সুপার ইজি।
এরর মেসেজ কাস্টমাইজ করা
আপনার এররগুলোর সাথে কনটেক্সচুয়াল ইনফরমেশন যোগ করার সবচেয়ে সিম্পল উপায় হলো এক্সেপশনের মেসেজে সেটি যোগ করা। নিচের উদাহরণে আমি একটি এক্সেপশন ক্যাচ করছি এবং একটি নতুন মেসেজ দিয়ে পুনরায় রেইজ করছি:
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 ফিচার ব্যবহার করা
ঠিক আছে, ঠিক আছে। আমাকে এটি.include করতে হয়েছিল, যেহেতু Honeybadger-এ এক্সেপশনে কনটেক্সচুয়াল ইনফরমেশন যোগ করার একটি স্লিক উপায় রয়েছে। এক্সেপশন অবজেক্ট মডিফাই করার বদলে, আপনি শুধু আপনার অ্যাপ্লিকেশনের যেকোনো জায়গা থেকে 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-এর context ফিচার আপনাকে যেকোনো ইনফো আপনার এক্সেপশনের সাথে আটাচ করতে দেয় বড় কোড না লিখে।