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

Honeybadger Gem v3: Tính Năng Chính, Cải Tiến, và Những Gì Bạn Cần Biết

TLDR: Chỉ cần các bullet points, xem CHANGELOG.

Tôi vừa phát hành bản cập nhật major mới nhất cho gem báo cáo exception của chúng tôi trong Ruby. Trong khi bản v2 là một bản viết lại hoàn toàn bao gồm chiến lược cấu hình mới, v3 chứa ít breaking changes hơn nhưng nhiều cải tiến tính năng và usability. Có rất nhiều thứ để nói, nên tôi sẽ đi thẳng vào vấn đề. Enjoy!

Plain ol' Ruby mode

Trong thế giới Rails, khá mong đợi rằng khi bạn cài một gem, nó sẽ tự động tích hợp với ứng dụng của bạn. Ví dụ, nhiều gem cung cấp Railtie riêng để chạy mã của chúng khi Rails khởi tạo.

Gem honeybadger hoàn toàn chấp nhận cách tiếp cận đó, làm cho việc thiết lập báo cáo lỗi toàn diện cho Rails, Sinatra, Sidekiq, và một số gem/framework phổ biến khác trở nên rất dễ dàng. Nó đơn giản chỉ là require 'honeybadger'.

Một số Rubyists thích tự xây dựng tích hợp của họ, tuy nhiên. Monkey patching (xảy ra nhiều trong Rails) khiến họ bực bội, và điều cuối cùng họ muốn là một gem thay đổi ứng dụng của họ theo cách không rõ ràng chỉ bằng việc require nó. Tôi hoàn toàn hiểu được điều đó (thực tế, tôi có xu hướng tư duy đó).

Các người khác có thể không dùng bất kỳ thư viện nào chúng tôi tích hợp và muốn tự báo cáo lỗi bằng Honeybadger.notify, tránh khởi tạo không cần thiết tại runtime.

Đó là lý do tôi thêm "Plain ol' Ruby" mode (tiêu đề không chính thức). Nếu bạn là một trong những "quái nhân" thích tự viết cấu hình và cài middleware từ đầu (hoặc bạn chỉ dùng plain Ruby), bạn có thể giờ require 'honeybadger/ruby' thay vì require 'honeybadger' thông thường. Bây giờ bạn có thể dùng Honeybadger.notify, Honeybadger.context, v.v. mà không có bất kỳ tích hợp tự động nào được kích hoạt: nó tối giản, dự đoán được, theo dõi lỗi cho Ruby:

require 'honeybadger/ruby'
begin
  # Mã thất bại
rescue => exception
  Honeybadger.notify(exception)
end

Nhiều agents

Nói về plain ol' Ruby, giờ bạn có thể dùng Ruby để tạo agents bổ sung, là thứ báo cáo lỗi đến dự án Honeybadger của bạn. Điều này nghĩa là bạn cuối cùng có thể báo cáo lỗi đến nhiều dự án Honeybadger trong cùng một ứng dụng. Dưới đây là giao diện của nó:

OtherBadger = Honeybadger::Agent.new
OtherBadger.configure do |config|
  config.api_key = 'project api key'
end
begin
  # Mã thất bại
rescue => exception
  OtherBadger.notify(exception)
end

Sự trở lại của Honeybadger.configure

Trước hết, nếu bạn dùng honeybadger.yml để cấu hình gem hiện tại, đừng lo -- không có gì thay đổi, và nó vẫn là mặc định!

Đó nói, chúng tôi có khách hàng nhớ khả năng cấu hình gem theo chương trình từ Ruby. Trong v3.0 bạn có được tốt nhất của hai thế giới: chúng tôi vẫn hỗ trợ cấu hình đầy đủ qua honeybadger.yml và biến môi trường và đã thêm lại Honeybadger.configure:

Honeybadger.configure do |config|
  config.api_key = 'project api key'
  config.exceptions.ignore += [CustomError]
end

Độ ưu tiên cho cấu hình là YAML -> ENV -> Ruby, nghĩa là biến môi trường sẽ ghi đè honeybadger.yml, và Honeybadger.configure sẽ ghi đè biến môi trường.

Báo cáo lỗi trong cron jobs và chương trình dòng lệnh

Một trong những vấn đề lâu đời của cron là tính năng email tự động của nó không hiểu error output. Chắc chắn, nó sẽ email bạn nếu task thất bại, nhưng nó cũng sẽ email bạn khi các task thành công tình cờ generate standard output.

Hey, bạn dùng Honeybadger để nhận ít email cảnh báo không actionable hơn à? Không cool sao nếu bạn có thể dùng Honeybadger để báo cáo cron failures thay vì hoặc ngoài email? Bây giờ bạn có thể.

Chúng tôi thêm lệnh honeybadger exec vào CLI (Command Line Interface) để xử lý báo cáo cron failures cũng như bất kỳ lệnh bạn thường thực thi qua command line. Nghĩa là bash scripts, executables, tasks make, v.v. Để dùng nó, chỉ cần thêm honeybadger exec trước bất kỳ lệnh nào:

$ honeybadger exec my-command --my-flag

Nếu lệnh thực thi thành công, nó sẽ thoát với mã 0 và không output (ngay cả standard out cũng bị tắt mặc định, nhưng bạn có thể bật với flag đặc biệt). Nếu lệnh thất bại, tuy nhiên, bạn sẽ nhận được thông báo Honeybadger bao gồm lệnh đã chạy và output đầy đủ.

Vì honeybadger exec im lặng tất cả output mặc định cho lệnh thành công, nó đặc biệt hữu ích với tính năng email của cron. Bằng cách dùng cả honeybadger exec và cron emails, bạn sẽ nhận được thông báo Honeybadger khi lệnh thất bại; nếu vì lý do nào đó thông báo Honeybadger cũng thất bại (do vấn đề kết nối, ví dụ), nó sẽ dump output từ lệnh gốc và cron vẫn sẽ email bạn về thất bại.

Báo cáo lỗi tùy chỉnh từ dòng lệnh

Đây khá đơn giản. Muốn gửi thông báo Honeybadger tùy chỉnh từ bash script (hoặc bất kỳ shell nào)? Dùng honeybadger notify:

$ honeybadger notify --message "This is an error from the command line"

Bạn có thể dùng các flag tùy chọn như --class, --component, --action, v.v. để thêm các thuộc tính bổ sung vào thông báo.

Các cải tiến khác

Chúng tôi thêm thậm chí nhiều tính năng và cải tiến hơn trong v3:

  • Honeybadger.notify giờ chấp nhận đối số string ngoài exception, nên bạn có thể làm Honeybadger.notify("these are not the badgers you're looking for").
  • Khi bên trong git repository, git revision tự động được báo cáo cùng exception. Revision có thể được thêm hoặc thay đổi thủ công với tùy chọn config :revision mới.
  • Giao diện người dùng của CLI giờ thân thiện hơn với thông báo lỗi verbose, và có thể dùng như executable độc lập (ngoài Rails).
  • Test suite nhanh gấp 10 lần, nghĩa là chúng tôi có thể phát triển tính năng và tích hợp mới nhanh hơn.
  • Bộ lọc dữ liệu request giờ dùng chiến lược wildcard match mặc định. Vì vậy nếu bạn lọc "password", cả tham số request "password" và "password_confirmation" sẽ bị lọc (cách Rails filters hoạt động).

Thay đổi và loại bỏ

Chúng tôi cũng đã làm một số thay đổi và loại bỏ một số tính năng không còn hợp lý:

  • Chúng tôi bỏ hỗ trợ Ruby 1.9.3 và 2.0.x; tiến về 2.1.0 sẽ là phiên bản thấp nhất được hỗ trợ chính thức.
  • Chúng tôi đã loại bỏ tất cả deprecations từ v2.
  • Mã metrics và tracing deprecated đã bị loại bỏ.
  • Honeybadger.start không còn cần thiết (và sẽ ném exception nếu dùng). Nếu bạn trước đây dùng Honeybadger ngoài Rails, bạn có thể dùng Honeybadger.configure để cấu hình agent mà không cần tạo instance Honeybadger::Config riêng hoặc gọi Honeybadger.start.
  • Chúng tôi đổi tên option plugins.skip thành skipped_pluggins và sidekiq.use_component giờ là true mặc định.
  • Biến CGI giờ được whitelist để khó hơn rò rỉ dữ liệu nhạy cảm vô tình.
  • Trong development, phương thức Honeybadger.notify giờ ném exception khi gọi không có đối số hợp lệ. Trong production nó log lỗi.
  • Lỗi khi evaluate honeybadger.yml giờ được ném thay vì logged, giúp xác định vấn đề cấu hình sớm hơn. Backtraces cho lỗi bên trong ERB tags cũng đã được cải thiện để dễ debug hơn.