সফটওয়্যার ডেভেলপমেন্টে কাস্টম এক্সেপশন সাধারণত একটি সাধারণ চিন্তা নয়। কিন্তু যদি আপনি অবজার্বেবিলিটি টুলে একটি এরর ক্যাচ করুন এবং সেটা দ্রুত ও সঠিকভাবে আইডেন্টিফাই না করতে পারেন, তবে আপনাকে এক্সেপশন সম্পর্কে আরও ইনফরমেশন এবং ডিটেইলস লাগতে পারে।
এই আর্টিকেলে আমরা দেখব কীভাবে Ruby-তে এক্সেপশন কাস্টমাইজ করতে হয় এবং এক্সেপশন ইনফোর্মেশন অভাবের কারণে ভবিষ্যতের সমস্যাগুলো মিটিগেট করতে হয়।
একটি দ্রুত নোট
এই পোস্ট "Debugging in Ruby with AppSignal"-এর স্বাভাবিক voortgang, সেজন্য সেটা আগে পড়তে পারেন ডিবাগিং ও কাস্টম এক্সেপশনের ওভারভিউ পাওয়ার জন্য।
Ruby-এ এক্সেপশন রেসকিউ করা
Ruby-তে Exception ক্লাস আছে, যেটা থেকে সব এরর-হ্যান্ডলিং ক্লাস ইনহেরিট করে। কাস্টম এক্সেপশন বানানোর আগে Ruby-এর স্ট্রাকচার্যাল এক্সেপশন ফ্লো বুঝি নেই।
Exceptionহল মেইন এক্সেপশন ক্লাস,rescue Exceptionসব এক্সেপশন ক্যাচ করবে যাException-এর থেকে ইনহেরিট করা। এটি বেস্ট প্র্যাকটিস নয়, কারণ Ruby-এর ইন্টারনাল এক্সেপশনও ক্যাচ করবে।- সবচেয়ে সহজ পদ্ধতি:
begin ... rescueব্লক ব্যবহার করুন। StandardErrorক্লাস একটি স্ট্যান্ডার্ড রেসকিউয়ার যা অ্যাপ্লিকেশন কোড এরর রিলেটেড এক্সেপশন ক্যাচ করে, Ruby-এর ইন্টারনাল এক্সেপশন ইগনোর করে।
begin
# risky code
rescue StandardError => e
# handle error
end
কোনো এক্সেপশন ক্লাস না লিখলেও Ruby StandardError হ্যান্ডল করা এক্সেপশনগুলো রিটার্ন করবে।
কাস্টম এক্সেপশন বানাতে StandardError-এর থেকে ইনহেরিট করা ক্লাস তৈরি করুন।
Ruby Exception-এ অতিরিক্ত ইনফরমেশন যোগ করুন
রিলেভেন্ট ইনফোর্মেশন ছাড়া নতুন এক্সেপশন বানালে ডিবাগিং-এ সাহায্য করবে না। এরর ডিটেইলস পাস করতে হয়। এখানে আমরা দেখব কীভাবে অবজেক্ট থেকে কাস্টম এক্সেপশনে ইনফোর্মেশন পাস করতে হয়।
StandardError-এর থেকে ইনহেরিট করা একটি নতুন কাস্টম এক্সেপশন তৈরি করুন। Rails প্রজেক্টে app/exceptions/custom_exception.rb ফাইল বানান।
class CustomException < StandardError
attr_reader :code, :name, :message, :internal_info
def initialize(code:, name:, message:, internal_info:)
@code = code
@name = name
@message = message
@internal_info = internal_info
super(message)
end
end
এখন begin...rescue ব্লকে CustomException রেইজ করুন এবং প্যারামিটার পাস করুন।
begin
# কিছু রিস্কি কোড
rescue => e
raise CustomException.new(
code: 1001,
name: "DataProcessingError",
message: "Failed to process data",
internal_info: e.message
)
end
Ruby-এ Exception এক্সটেন্ড করুন
এক্সেপশন এক্সটেন্ড করলে কাস্টমাইজেশন আরও স্পেসিফিক এবং রিয়ুজেবল লেভেলে যায়। Ruby-তে বিভিন্ন টাইপের এররের জন্য আলাদা এক্সেপশন আছে, আমরাও সেটা ফলো করতে পারি।
লগে ইনফরমেশন খুঁজে বের করা কষ্টসাধ্য। ডেভেলপাররা często নিজেদের দোষ দেন এরর সম্পর্কে বেশি ইনফোর্মেশন না দিয়ে। মอนিটরিং টুল ব্যবহার না করলে মেনিংফুল ডেটা ইনক্লুড করা ভবিষ্যতে বাঁচাতে পারে।
Pro-tip: 'Debugging Exceptions in Ruby with AppSignal' সেকশন দেখুন AppSignal-এ কাস্টম এক্সেপশন সেটআপ ও ট্র্যাক করার জন্য।
নিচের উদাহরণে লগে এক্সেপশন ডিসপ্লে কাস্টমাইজ করব। এটা শুধু সুন্দর দেখানোর জন্য নয় — ডেটাতে ইউজ করা কীওয়ার্ডগুলো এরর খুঁজে বের করতে এবং অ্যাপ মোনিটর করার জন্য কী।
colorizegem Gemfile-এ যোগ করুন:gem 'colorize'bundle installচালিয়ে Rails অ্যাপ লঞ্চ করুন।- এক্সেপশন ক্লাসে gem ইম্পোর্ট করুন। অ্যাট্রিবিউটগুলো ফরম্যাটেড প্রিন্ট করুন যাতে সহজে দেখা যায়।
require 'colorize'
class CustomException < StandardError
# ... previous code ...
def formatted_message
"[#{@code}] #{@name}: #{@message}\nInternal: #{@internal_info}".colorize(:red)
end
end
উপসংহার এবং পরবর্তী পদক্ষেপ
এই পোস্টে আমরা কভার করেছি কীভাবে Ruby এক্সেপশন কাস্টমাইজ ও হাইলাইট করতে হয় লগে। আরও অনেক কাস্টমাইজেশন সম্ভব, কিন্তু সবচেয়ে গুরুত্বপূর্ণ হলো আপনার অ্যাপ্লিকেশনের জন্য রিলেভেন্ট এক্সেপশন হ্যান্ডল করা। এবং মনে রাখবেন, সব এক্সেপশনে একই ফরম্যাটিং স্টাইল প্রয়োগ করবেন না, কারণ Rails ইতিমধ্যে সেটা করে।
Happy coding!
P.S. Ruby Magic পোস্টগুলি প্রকাশ होते সাথে সাথে পেতে আমাদের Ruby Magic নিউজলেটার সাবস্ক্রাইব করুন!
Brena Monteiro
অতিথি লেখক Brena একজন Tech Lead যারা নতুন ডেভেলপার মেন্টরিং এবং হাই-পারফর্মিং টিম বানাতে_passionate। স্কেলেবল API এবং ক্লাউড সার্ভিস ইন্টিগ্রেশন বানাতে অভিজ্ঞ। Evolutionary architecture এবং Extended Reality (XR) Apprentice-এ আগ্রহী।
Brena Monteiro-এর সব আর্টিকেল