Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

แนะนำเบรดครัมบ์

คุณเคยจัดการกับข้อผิดพลาดในการผลิตและ ไม่ว่าคุณจะพยายามทำอะไร คุณไม่สามารถทำซ้ำปัญหาในสภาพแวดล้อมการพัฒนาหรือการแสดงละครของคุณ? บ่อยครั้งขั้นตอนต่อไปคือการรวบรวมข้อมูลมากขึ้นโดยการโยนบันทึกการแก้ปัญหาที่การผลิต หากคุณไม่มีวิธีที่ดีในการเชื่อมโยงบันทึกกับคำขอ อาจทำให้หงุดหงิด โดยเฉพาะในระหว่างที่เกิดเหตุการณ์

เราได้เพิ่มคุณลักษณะเพื่อช่วยและเรียกว่า Breadcrumbs

แนะนำเบรดครัมบ์

เบรดครัมบ์ คล้ายกับบันทึกเหตุการณ์มาก แต่มีการจัดเก็บและรายงานควบคู่ไปกับข้อผิดพลาด เช่นเดียวกับบันทึก Breadcrumb มีข้อความ แต่ก็สามารถเก็บข้อมูลเมตาได้ (ในรูปแบบของ hashmap) ชุดเบรดครัมบ์จะถูกรวบรวมตลอดอายุของคำขอ (หรือการร้องของาน) และจะหายไปทันทีเว้นแต่จะมีการรายงานข้อผิดพลาด

การเพิ่มเบรดครัมบ์ของคุณเองลงในสแต็กนั้นง่ายมาก เพียงโทรไปที่ Honeybadger.add_breadcrumb ที่ใดก็ได้ในรหัสของคุณ:

Honeybadger.add_breadcrumb("Loading User", metadata: {
  user_name: user_name,
})

และหากมีการรายงานข้อผิดพลาดหลังจากนั้น คุณควรเห็นข้อผิดพลาดนั้นใน Breadcrumb stack:

แนะนำเบรดครัมบ์

โอ้ user_name ดูว่างเปล่าที่อาจสร้างปัญหาได้

เบรดครัมบ์อัตโนมัติ

ห้องสมุด Honeybadger Ruby มีตะขอเกี่ยวกับ Ruby &Rails เพื่อรวบรวม breadcrumbs โดยอัตโนมัติ ตัวอย่างเช่น ข้อความบันทึกทั้งหมดที่ปล่อยออกมาในการผลิต (ส่งผ่าน Logger คลาส) ถูกจับและสร้างเป็นเบรดครัมบ์ นอกจากนี้เรายังผูกเข้ากับ Rails Instrumentation เพื่อรวบรวม breadcrumbs สำหรับ Controller Actions, SQL Queries, Active Job invocations ฯลฯ...

ใช้งานอย่างไร?

ขณะนี้เบรดครัมบ์พร้อมใช้งานผ่านไคลเอนต์ Ruby ของเรา คุณต้องอัปเดตเป็นเวอร์ชัน 4.4.0 และอย่าลืมเปิดใช้งานในการกำหนดค่าเพราะจะ ปิดการใช้งาน โดยค่าเริ่มต้นจนกว่าเราจะปล่อย 5.0.0 เวอร์ชันของอัญมณีเพื่อให้แน่ใจว่าเราแก้ไขข้อบกพร่องใด ๆ

โปรดลองใช้และแจ้งให้เราทราบหากคุณพบปัญหาใดๆ

การขยายเบรดครัมบ์

ตอนนี้เบรดครัมบ์ได้รับการแนะนำอย่างเป็นทางการแล้ว เรามาดูตัวอย่างสั้นๆ เกี่ยวกับวิธีขยายเบรดครัมบ์กัน หากคุณเปิดใช้งานเบรดครัมบ์ในแอป Rails คุณจะได้รับเบรดครัมบ์เครื่องมือวัดมาตรฐานที่แนบมาฟรี แต่ถ้าเราต้องการมากกว่านี้ล่ะ

สมมติว่าเราต้องการสร้างเบรดครัมบ์ทุกครั้งที่แอปของเราส่งคำขอ HTTP ข้อมูลนี้อาจมีประโยชน์ในขณะทำการดีบั๊ก

วิธีง่ายๆ ในการดำเนินการให้สำเร็จคือเรียก Honeybadger.add_breadcrumb เมื่อมีการร้องขอแต่ละครั้ง

def send_a_message
  res = conn.post("/message", { user: user.id, body: "Hey!" }.to_json)
  Honeybadger.add_breadcrumb("Request: /message", metadata: { user: user.id })
  res
end

ที่นี่เราเก็บ breadcrumb หลังจากทุก POST ไปยัง /message . ครั้งต่อไปที่แอปของเราแสดงข้อผิดพลาดหลังจากส่งข้อความนี้ เราควรดูว่าผู้ใช้รายใดส่งข้อความนี้และเกิดขึ้นเมื่อใดที่เกี่ยวข้องกับข้อผิดพลาด เย้!

แม้ว่าจะค่อนข้างยุ่งยาก เนื่องจากเราต้องการ add_breadcrumb โทรในแต่ละสถานที่ที่เราส่งคำขอ ฉัน ต้องการทราบ อย่างไรก็ตาม มี มี ข้อดีของการสร้าง breadcrumbs แบบนี้ คุณสามารถระบุได้เฉพาะเจาะจงมากเกี่ยวกับข้อมูลเมตาที่คุณต้องการจับภาพด้วยวิธีนี้ บ่อยครั้งวิธีนี้เป็นวิธีที่ดีในการรวบรวมข้อมูลเป้าหมายซึ่งเกิดจากข้อบกพร่องในการผลิต

จริงๆแล้วฉันแค่อยากรู้ว่าคำขอออกไปเมื่อไหร่และที่ไหน คงจะดีถ้าห้องสมุดสามารถทำงานให้ฉันได้มากที่สุด;)

เครื่องดนตรีกับฟาราเดย์

เราจะโกงเล็กน้อยและถือว่าคุณกำลังใช้ไลบรารีคำขอ Faraday ยอดนิยม

เราสามารถสร้างมิดเดิลแวร์ของเราเองเพื่อทำงานให้สำเร็จ แต่ฉันต้องการใช้เครื่องมือวัดของ Rails เป็นนายหน้าแทน โชคดีที่มีมิดเดิลแวร์ให้บริการโดยอัญมณี faraday_middleware ที่จะปล่อยกิจกรรมให้เรา ตรวจสอบให้แน่ใจว่าอัญมณีอยู่ใน Gemfile . ของคุณ และตรวจสอบให้แน่ใจว่า instrumentation มิดเดิลแวร์ถูกแทรกเข้าไปในการเชื่อมต่อ

connection = Faraday.new do |conn|
  conn.use :instrumentation
  conn.adapter Faraday.default_adapter
end

การดำเนินการนี้อาจต้องใช้ความพยายามเล็กน้อยหากคุณไม่แชร์การเชื่อมต่อภายในแอป หากคุณขี้เกียจ คุณสามารถเพิ่ม ConnectionOptions ไว้ข้างหน้าเพื่อให้แน่ใจว่าคำขอทั้งหมดเปิดใช้งานมิดเดิลแวร์ ระวังด้วย เพราะสิ่งนี้จะรวบรวมคำขอของฟาราเดย์ที่เกิดขึ้นภายในแอปของคุณและรวมอัญมณีด้วย (ซึ่งคุณอาจต้องการ)

การใช้เครื่องมือวัด Rails มีผลข้างเคียงที่ดี อย่างหนึ่งคือเราสามารถสมัครสมาชิกหลายรายการสำหรับกรณีการใช้งานอื่นๆ (เช่น เพื่อวัตถุประสงค์ในการบันทึกทั่วไป)

ดื่มด่ำกับการดูคำขอของเรา

เมื่อคำขอ Faraday ของเราได้รับเครื่องมือแล้ว เราก็สามารถสมัครรับข้อมูลและสร้างเบรดครัมบ์ได้:

ActiveSupport::Notifications.subscribe "request.faraday" do |_, _, _, _, data|
  method = data[:method].to_s.upcase
  metadata = data.to_h.slice(:url, :status).merge({method: method})
  Honeybadger.add_breadcrumb("#{method}: #{metadata[:url]}", category: "request", metadata: metadata)
end

Honeybadger กำลังเพิ่มเบรดครัมบ์สำหรับคำขอขาออกแต่ละรายการ!

แนะนำเบรดครัมบ์

สังเกตว่าเรากำลังตรวจสอบจุดข้อมูลบางส่วนจากคำขอของเราเท่านั้น เราไม่เพิ่มเพย์โหลดเนื้อหาขาออกหรือการตอบสนอง เนื่องจากมีโอกาสดีที่ข้อมูลที่ละเอียดอ่อนอาจรั่วไหลไปยังข้อมูลเมตาของเบรดครัมบ์

แจ้งให้เราทราบว่าเป็นอย่างไร!

เราหวังว่าเบรดครัมบ์จะช่วยเสริมกล่องเครื่องมือดีบั๊กของคุณ ลองใช้งานและแจ้งให้เราทราบหากมีสิ่งใดที่คุณต้องการเพิ่ม