บางครั้งคำสั่งผสมย้อนกลับ / ข้อความแสดงข้อผิดพลาดมาตรฐานไม่เพียงพอ บางครั้งคุณต้องการข้อมูลเพิ่มเติมเพื่อค้นหาสาเหตุของข้อผิดพลาด โชคดีที่ Ruby ทำได้ง่ายมาก
การปรับแต่งข้อความแสดงข้อผิดพลาด
วิธีที่ง่ายที่สุดในการเพิ่มข้อมูลตามบริบทให้กับข้อผิดพลาดของคุณคือการเพิ่มลงในข้อความของข้อยกเว้น ในตัวอย่างด้านล่าง ฉันพบข้อยกเว้นและเพิ่มข้อความใหม่ด้วยข้อความใหม่:
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
การตัดข้อยกเว้น
อีกทางเลือกหนึ่งสำหรับการรวมข้อมูลตามบริบทในข้อยกเว้นคือการสร้างข้อยกเว้นที่กำหนดเอง เนื่องจากข้อยกเว้นเป็นเพียงคลาสเช่นเดียวกับทุกอย่างใน Ruby คุณจึงเพิ่ม 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
โอเคโอเค. ฉันต้องใส่สิ่งนี้ เนื่องจาก 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 ช่วยให้คุณสามารถแนบข้อมูลใดก็ได้ที่คุณต้องการกับข้อยกเว้นของคุณโดยไม่ต้องใช้โค้ดมากนัก