Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Thành Thạo Ngoại Lệ Tùy Chỉnh Trong Ruby: Nâng Cao Xử Lý Lỗi & Khả Quan Sát

Tùy chỉnh ngoại lệ thường không phải là mối quan tâm phổ biến trong phát triển phần mềm. Nhưng nếu bạn bắt gặp một lỗi trong công cụ quan sát (observability) và không thể xác định đúng và nhanh chóng vấn đề, bạn có thể cần thêm thông tin và chi tiết về ngoại lệ đó.

Bài viết này sẽ chỉ cho bạn cách tùy chỉnh ngoại lệ trong Ruby và giảm thiểu các vấn đề tiềm ẩn trong tương lai do thiếu thông tin lỗi.

Hãy bắt đầu ngay!

Một Ghi Chú Nhanh

Bài viết này là sự phát triển tự nhiên từ "Debugging trong Ruby với AppSignal", vì vậy chúng tôi khuyên bạn nên đọc bài đó trước để có cái nhìn tổng quan về debugging và giới thiệu về ngoại lệ tùy chỉnh.

Cách Bắt (Rescue) Ngoại Lệ Trong Ruby

Ruby có một lớp tên là Exception, mà các lớp xử lý lỗi kế thừa từ đó. Trong phần này, chúng ta sẽ hiểu rõ hơn về luồng cấu trúc ngoại lệ của Ruby trước khi tạo ngoại lệ tùy chỉnh của mình.

Exception là lớp ngoại lệ chính trong Ruby, và rescue Exception sẽ bắt tất cả các ngoại lệ kế thừa từ Exception. Không phải là phương pháp hay khi sử dụng điều này trong ứng dụng, vì nó sẽ bắt tất cả các ngoại lệ được Ruby sử dụng nội bộ.

Cách dễ nhất để bắt một ngoại lệ trong Ruby là tạo một khối mã begin ... rescue như ví dụ dưới đây:


Vì Exception sẽ bắt tất cả các ngoại lệ, chúng ta nên cố gắng sử dụng thứ gì đó cụ thể hơn để lọc và chỉ lấy lỗi mình muốn. Một ví dụ là lớp StandardError, một bộ bắt tiêu chuẩn được dùng để bắt các ngoại lệ liên quan đến lỗi mã ứng dụng bằng cách bỏ qua các ngoại lệ nội bộ của Ruby.

Để bắt StandardError, bạn có thể dùng ví dụ dưới đây:


Hoặc, nếu không khai báo lớp ngoại lệ, Ruby sẽ trả về các ngoại lệ được xử lý bởi lớp StandardError.


Để tạo một ngoại lệ tùy chỉnh với Ruby, bạn có thể tạo một lớp kế thừa từ StandardError. Chúng ta sẽ đề cập đến điều này trong các phần tiếp theo.

Để tìm hiểu thêm về các ngoại lệ và tìm lớp tốt nhất để kế thừa, hãy xem danh sách ngoại lệ của Ruby.

Thêm Thông Tin Bổ Sung Vào Ngoại Lệ Ruby

Tạo một ngoại lệ mới mà không gửi thông tin liên quan sẽ không giúp hiệu quả trong việc debugging — xác định và sửa chữa — vấn đề. Bạn cần thêm chi tiết lỗi. Ở đây, chúng ta sẽ xem cách truyền thông tin từ các đối tượng vào ngoại lệ tùy chỉnh.

Hãy tạo một ngoại lệ tùy chỉnh mới chỉ để nhận dữ liệu chúng ta muốn ghi log. Như đã đề cập ở phần trước, ngoại lệ tùy chỉnh cần kế thừa từ StandardError.

Bạn có thể dùng một dự án Rails đơn giản để kiểm tra việc triển khai này. Tạo một thư mục mới tên exceptions bên trong thư mục app và một lớp tên custom_exception.rb trong dự án Rails của bạn.


Trong lớp ngoại lệ này, chúng ta có thể định nghĩa tất cả thông tin cần hiển thị trong log và chúng ta sử dụng bốn thuộc tính cho dữ liệu của mình:

  • mã để liệt kê ngoại lệ
  • một tên
  • một thông điệp mang tính thông tin
  • thông tin chi tiết nội bộ về ngoại lệ đã được Ruby cung cấp

Và bây giờ chúng ta tạo một khối begin...rescue để ném (raise) CustomException và truyền các tham số cho các thuộc tính của ngoại lệ.


Điều này trông hữu ích, nên hãy tiếp tục triển khai và sử dụng dữ liệu này để tùy chỉnh log ngoại lệ.

Mở Rộng Ngoại Lệ Trong Ruby

Mở rộng ngoại lệ cho phép chúng ta nâng cao tùy chỉnh lên một mức độ cụ thể và tái sử dụng hơn. Giống như Ruby có nhiều ngoại lệ cho các loại lỗi khác nhau, chúng ta cũng có thể tuân theo dòng lập trình này trong hệ thống của mình.

Tiếp theo, hãy hiểu cách ghi đè (override) ngoại lệ của chúng ta và sử dụng nó trong một ngữ cảnh đòi hỏi sự mở rộng.

Việc tìm thông tin trong log là một hoạt động đau khổ. Các nhà phát triển thường tự trách mình vì không đưa thêm thông tin về lỗi hoặc cách tìm kiếm và lọc. Nếu bạn không sử dụng bất kỳ công cụ giám sát nào cung cấp điều này, việc bao gồm dữ liệu có ý nghĩa có thể cứu bạn trong tương lai gần.

Mẹo chuyên nghiệp: Xem phần "Debugging Exceptions in Ruby with AppSignal" trong bài viết Debugging in Ruby with AppSignal để biết thông tin về cách thiết lập và theo dõi ngoại lệ tùy chỉnh trong AppSignal.

Trong ví dụ dưới đây, chúng ta sẽ tùy chỉnh cách hiển thị ngoại lệ trong log. Ban đầu, bạn có thể nghĩ rằng đó chỉ là một cách hiển thị dữ liệu nhẹ nhàng và đẹp mắt. Tuy nhiên, các từ khóa được sử dụng trong dữ liệu là chìa khóa để tìm thấy lỗi và giúp người giám sát ứng dụng.

Thêm gem colorize vào dự án của bạn bằng cách bao gồm mã dưới đây vào Gemfile.


Chạy bundle để cài đặt gem colorize và khởi chạy ứng dụng Rails của bạn.


Bây giờ, trong lớp ngoại lệ của bạn, hãy import gem. In các thuộc tính theo định dạng rõ ràng, để dễ dàng nhìn thấy và nhanh chóng tìm thấy lỗi quan trọng.


Hãy xem kết quả của sự tùy chỉnh trực quan này và thử một số tùy chọn để tạo định dạng và phong cách của riêng bạn.

Thành Thạo Ngoại Lệ Tùy Chỉnh Trong Ruby: Nâng Cao Xử Lý Lỗi & Khả Quan Sát

Tóm Tắt & Các Bước Tiếp Theo

Trong bài viết này, chúng ta đã đề cập đến cách tùy chỉnh và làm nổi bật ngoại lệ Ruby trong log của bạn. Nhiều tùy chỉnh khác cũng có thể thực hiện, nhưng điều quan trọng nhất là bạn xử lý các ngoại lệ liên quan đến ứng dụng của mình. Và nhớ đừng áp dụng cùng một phong cách định dạng cho tất cả các ngoại lệ, vì Rails đã làm điều đó.

Chúc bạn viết mã vui vẻ!

P.S. Nếu bạn muốn đọc các bài Ruby Magic ngay khi chúng xuất bản, hãy đăng ký bản tin Ruby Magic của chúng tôi và không bao giờ bỏ lỡ bất kỳ bài viết nào!

Thành Thạo Ngoại Lệ Tùy Chỉnh Trong Ruby: Nâng Cao Xử Lý Lỗi & Khả Quan Sát

Brena Monteiro

Tác giả khách Brena là một Tech Lead đam mê hướng dẫn các nhà phát triển mới và có kinh nghiệm phát triển và lãnh đạo các nhóm hiệu suất cao. Cô có kinh nghiệm xây dựng API có khả năng mở rộng và tích hợp giữa các dịch vụ đám mây, 열 tình về kiến trúc tiến hóa, và là học sinh thực tập Extended Reality (XR).

Tất cả bài viết của Brena Monteiro