আমরা সম্প্রতি হানিব্যাজারের সংস্করণ 3.2 পাঠিয়েছি রুবি জেম, যা আপনার ত্রুটি প্রতিবেদনে প্রসঙ্গ যোগ করা সহজ করতে একটি নতুন বৈশিষ্ট্য অন্তর্ভুক্ত করে৷
tl;dr
হানিব্যাজার রত্ন এখন #to_honeybadger_context
সংজ্ঞায়িত করা সমর্থন করে কোনো ব্যতিক্রম ক্লাসে পদ্ধতি। যখন সেই ব্যতিক্রমের একটি উদাহরণ উত্থাপিত হয় এবং Honeybadger-এর কাছে রিপোর্ট করা হয়, তখন এর প্রসঙ্গ স্বয়ংক্রিয়ভাবে ত্রুটি প্রতিবেদনে অন্তর্ভুক্ত হয়ে যাবে:
class MyError < StandardError
attr_reader :custom_attribute
def initialize(err, custom_attribute)
@custom_attribute = custom_attribute
super(err)
end
def to_honeybadger_context
{
custom_attribute: custom_attribute
}
end
end
raise MyError.new("Something went wrong", { foo: 'bar' })
# Honeybadger context will include:
# {
# custom_attribute: {
# foo: 'bar'
# }
# }
প্রসঙ্গ কি?
আপনার অ্যাপ্লিকেশনে কোনো ত্রুটি ঘটলে প্রসঙ্গ আপনাকে হানিব্যাজারে অতিরিক্ত ডেটা পাঠাতে দেয়। রেলে, আপনি Honeybadger.context
ব্যবহার করে বর্তমান অনুরোধের জন্য প্রসঙ্গ সেট করতে পারেন পদ্ধতি, যা আমাদের রুবি রত্ন দ্বারা সরবরাহ করা হয়েছে:
Honeybadger.context({
user_email: '[email protected]'
})
বর্তমান অনুরোধে (অথবা আপনি যদি ব্যাকগ্রাউন্ড কর্মী চালান তাহলে চাকরি) প্রতিটি ত্রুটির নিজস্ব অনন্য প্রসঙ্গ ডেটা থাকবে৷
আপনার প্রসঙ্গ ডেটা যেকোনও হতে পারে, তবে প্রায়ই জিনিসগুলি অন্তর্ভুক্ত করে যেমন ব্যবহারকারীর আইডি বা বর্তমানে লগ ইন করা ব্যবহারকারীর ইমেল ঠিকানা, কিছু কাঁচা পোস্ট ডেটা বা ডিবাগিং-এ সহায়তা করার জন্য অন্যান্য সম্পর্কিত পেলোড, একটি ব্যাকগ্রাউন্ড কাজের আইডি ইত্যাদি।
ম্যানুয়ালি একটি ত্রুটি রিপোর্ট করার সময় আপনি স্থানীয় প্রসঙ্গ যোগ করতে পারেন:
Honeybadger.notify(exception, context: {
user_email: '[email protected]'
})
মজার ঘটনা:যদিও প্রসঙ্গ যেকোনো কিছু হতে পারে, হানিব্যাজারের কয়েকটি "বিশেষ" প্রসঙ্গ কী আছে। উদাহরণস্বরূপ, আপনি যদি user_email
অন্তর্ভুক্ত করেন আপনার ত্রুটি প্রতিবেদনের সাথে কী, হানিব্যাজার প্রতিটি ত্রুটির জন্য প্রভাবিত ব্যবহারকারীদের একটি প্রতিবেদন তৈরি করবে।
ব্যতিক্রম থেকে প্রসঙ্গ যোগ করা
কিছু প্রসঙ্গ একটি অনুরোধের পরিবর্তে একটি ব্যতিক্রমের জন্য নির্দিষ্ট। উদাহরণস্বরূপ, বলুন আমরা ফ্যারাডে রত্ন ব্যবহার করে একটি HTTP অনুরোধ করছি:
require 'faraday'
conn = Faraday.new(:url => 'https://example.com') do |faraday|
faraday.response :raise_error # Raises an error if the request isn't successful
faraday.adapter Faraday.default_adapter
end
response = conn.get('/does-not-exist') # => Faraday::ResourceNotFound
উপরের কোডটি নিম্নলিখিত ব্যতিক্রমটি তুলে ধরে:
Faraday::ResourceNotFound: the server responded with status 404
Honeybadger স্বয়ংক্রিয়ভাবে এই ত্রুটিটি রিপোর্ট করবে (অনুমান করে এটি করতে কনফিগার করা হয়েছে), কিন্তু এটির response
সম্পর্কে কোনো তথ্য থাকবে না বস্তু এই তথ্যটি থাকা ভালো হবে, বিশেষ করে কম সুস্পষ্ট সার্ভার ত্রুটির জন্য, যেমন 500 প্রতিক্রিয়া৷
Faraday::ResourceNotFound
এর সংজ্ঞা দেখছি GitHub-এ, আমরা দেখতে পাই যে এটি আসলে এক প্রকার ClientError
, এবং ClientError
একটি বৈশিষ্ট্য সংজ্ঞায়িত করে যা প্রতিটি উদাহরণে প্রতিক্রিয়া বস্তু সংরক্ষণ করে।
এই তথ্য ব্যবহার করে, আমরা Faraday::ClientError
এর সমস্ত ঘটনা উদ্ধার করতে পারি এবং Honeybadger.notify
ব্যবহার করুন প্রসঙ্গে কিছু প্রতিক্রিয়া ডেটা যোগ করতে:
begin
response = conn.get('/does-not-exist')
rescue Faraday::ClientError => err
Honeybadger.notify(err, context: {
response_status: err.response.status,
response_headers: err.response.headers
})
# Additional error handling...
end
এটি আমাদের প্রতিক্রিয়া সম্পর্কে কিছু অতিরিক্ত তথ্য সহ হানিব্যাজারের কাছে ব্যর্থ অনুরোধগুলি রিপোর্ট করার অনুমতি দেয়৷
একটি ত্রুটি ঘটলে আমরা ব্যতিক্রম-নির্দিষ্ট প্রসঙ্গ যোগ করার জন্য এই প্যাটার্নটি ব্যবহার করি এবং এটি কাজ করার সময়, এটি আমাদের কোডকে রেসকিউ স্টেটমেন্ট এবং কাস্টম নোটিফিকেশন লজিক দিয়ে বিশৃঙ্খল করে, যা অগোছালো এবং আমাদের কোডে অনেক ওভারহেড যোগ করে। ভাল খবর:একটি ভাল উপায় আছে!
নতুন বৈশিষ্ট্য:ব্যতিক্রম-স্তরের প্রসঙ্গ
ম্যানুয়ালি ত্রুটি রিপোর্ট করার পরিবর্তে, প্রসঙ্গটি এখন ব্যতিক্রম শ্রেণীতেই সংজ্ঞায়িত করা যেতে পারে , এবং Honeybadger এটি স্বয়ংক্রিয়ভাবে তুলে নেবে, শেষ পর্যন্ত যেখানেই ত্রুটি রিপোর্ট করা হোক না কেন।
একটি কুৎসিত rescue
যোগ করার পরিবর্তে পূর্ববর্তী উদাহরণটি পুনরায় দেখুন বিবৃতি, আসুন ব্যতিক্রমটি পরিচালনা করার জন্য Honeybadger-এর অন্তর্নির্মিত রিপোর্টিংকে অনুমতি দিন:
response = conn.get('/does-not-exist') # => Faraday::ResourceNotFound
পরিবর্তে, আসুন #to_honeybadger_context
যোগ করি Faraday::ClientError
করার পদ্ধতি , যা একটি বিশেষ পদ্ধতি Honeybadger চেক করে যখন কোনো ব্যতিক্রম রিপোর্ট করা হয়:
Faraday::ClientError.class_eval do
def to_honeybadger_context
{
response_status: err.response.status,
response_headers: err.response.headers
}
end
end
#to_honeybadger_context
যোগ করে Faraday::ClientError
করার পদ্ধতি , আমাদের কোড বিশৃঙ্খল না করে যখনই সেই ত্রুটি ঘটবে তখনই আমরা প্রতিক্রিয়া প্রসঙ্গ পাব!