Rails 7 이전에는 오류 처리가 종종 사용자 정의 솔루션이나 서드파티 Gem에 의존하여 일관성 부족과 복잡성을 야기했습니다. Error Reporter API는 이러한 문제에 대한 내장된 일관된 해결책을 제시하며, 예외를 포착하고, 형식을 지정하며, 전달하는 과정을 중앙 집중화합니다.
Rails.error.report의 역할
Rails.error.report는 오류를 수동으로 보고하는 데 특화되어 있습니다. 이는 예외를 발생시키지 않는 오류 유사 상황을 추적하거나, 기존 begin rescue 블록 내에서 새로운 오류 보고 기능을 통합할 때 특히 유용합니다.
Rails.error.report 작동 방식
Rails.error.report를 활용하려면 먼저 서브스크라이버 객체를 설정해야 합니다. 이 객체는 오류가 보고될 때 애플리케이션이 수행해야 할 작업을 정의합니다.
- 
    
서브스크라이버 객체:
report메서드를 가진 모든 Ruby 객체가 될 수 있습니다. - 
    
report메서드 내 로직: 콘솔에 오류 로깅, 서드파티 오류 모니터링 서비스로 전송, 특정 작업 트리거 등 사용자 정의 로직을 구현할 수 있습니다. 
예시: 서브스크라이버 설정
```ruby # app/subscribers/custom_error_subscriber.rb class CustomErrorSubscriber def report(exception, handled:, severity:, context: {}, source: nil) puts “ — Error Report —” puts “Type: #{exception.class}” puts “Message: #{exception.message}” puts “Handled: #{handled}” puts “Severity: #{severity}” puts “Context: #{context}” puts “Source: #{source || ‘N/A’}” puts “——————– “ end end
config/initializers/error_reporter.rb
Rails.error.subscribe(CustomErrorSubscriber.new)
Rails.error.set_context(application: ‘OrderProcessingApp’)
```
위 코드처럼 CustomErrorSubscriber를 정의하고 이니셜라이저에서 Rails.error.subscribe를 통해 등록합니다. Rails.error.set_context를 사용하여 애플리케이션 전반에 걸쳐 오류 보고에 포함될 전역 컨텍스트를 설정할 수도 있습니다.
예시: 오류 수동 보고
서브스크라이버가 등록되면 Rails.error.report를 사용하여 수동으로 오류 정보를 보낼 수 있습니다.
ruby
def process_user_input(input)
  if input.nil? || input.empty?
    Rails.error.report(StandardError.new("User input cannot be empty"), handled: false, severity: :error, context: { input_value: input, action: 'user_registration' })
    return false
  end
  true
end
process_user_input(nil)
이 예시에서는 사용자 입력이 유효하지 않을 때 예외를 발생시키지 않고 Rails.error.report를 통해 오류를 보고합니다. 이때 handled, severity, context 등의 추가 정보를 함께 전달할 수 있어 디버깅에 큰 도움이 됩니다.