В нашем приложении Rails мы используем Airbrake, подключенный к хост-серверу Errbit.
Мы используем rescue
и rescue_from
во многих местах, где мы хотим обрабатывать любые исключения определенным образом, а затем мы регистрируем исключение перед возвратом ответа.
Некоторые примеры, которые мы имеем в нашем ApplicationController
:
rescue_from CanCan::AccessDenied do |e|
Rails.logger.error "CanCan exception: #{e.message}"
render 'errors/401', status: 401
end
rescue_from ActionController::InvalidAuthenticityToken do |e|
Rails.logger.error "Authenticity exception: #{e.message}"
render 'errors/csrf', status: 400
end
И затем у нас также есть некоторые в отдельных методах, таких как API:
def try_request
Response.new(yield)
rescue RestClient::Unauthorized,
RestClient::ExceptionWithResponse,
RestClient::InternalServerError,
RestClient::BadRequest => e
Rails.logger.error "API exception: #{e.message}"
Response.new(e.response)
end
Однако, используя rescue
, мы заметили, что Errbit больше не собирал наши исключения, потому что мы их захватывали ... имеет смысл ... но мы все еще хотим видеть это в наших отчетах Errbit!
Вы можете вручную уведомить Airbrake с помощью:
Airbrake.notify(e)
Но мы надеялись избежать необходимости вставлять этот код в каждый спасательный блок.
Возможно ли иметь заявление высокого уровня, которое может уведомить Airbrake при использовании rescue
?