কম্পিউটার

ব্যতিক্রম ক্লাসে প্রসঙ্গ যোগ করা হচ্ছে

আমরা সম্প্রতি হানিব্যাজারের সংস্করণ 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: 'user@example.com'
})

বর্তমান অনুরোধে (অথবা আপনি যদি ব্যাকগ্রাউন্ড কর্মী চালান তাহলে চাকরি) প্রতিটি ত্রুটির নিজস্ব অনন্য প্রসঙ্গ ডেটা থাকবে৷

আপনার প্রসঙ্গ ডেটা যেকোনও হতে পারে, তবে প্রায়ই জিনিসগুলি অন্তর্ভুক্ত করে যেমন ব্যবহারকারীর আইডি বা বর্তমানে লগ ইন করা ব্যবহারকারীর ইমেল ঠিকানা, কিছু কাঁচা পোস্ট ডেটা বা ডিবাগিং-এ সহায়তা করার জন্য অন্যান্য সম্পর্কিত পেলোড, একটি ব্যাকগ্রাউন্ড কাজের আইডি ইত্যাদি।

ম্যানুয়ালি একটি ত্রুটি রিপোর্ট করার সময় আপনি স্থানীয় প্রসঙ্গ যোগ করতে পারেন:

Honeybadger.notify(exception, context: {
  user_email: 'user@example.com'
})

মজার ঘটনা:যদিও প্রসঙ্গ যেকোনো কিছু হতে পারে, হানিব্যাজারের কয়েকটি "বিশেষ" প্রসঙ্গ কী আছে। উদাহরণস্বরূপ, আপনি যদি 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 করার পদ্ধতি , আমাদের কোড বিশৃঙ্খল না করে যখনই সেই ত্রুটি ঘটবে তখনই আমরা প্রতিক্রিয়া প্রসঙ্গ পাব!


  1. Pry এ ব্যতিক্রমের সাথে কাজ করা

  2. রুবিতে কাস্টম ব্যতিক্রম

  3. কেন আমরা ক্লাস তৈরি করব?

  4. রুবিতে ব্যতিক্রম