지난주 honeybadger 루비 젬의 버전 4.0.0이 정식 출시되었습니다. 이번 릴리스에는 오랫동안 기다려 온 기능이 포함되어 있어, 에러 리포트가 Honeybadger로 전송되기 전에 훨씬 더 손쉽게 커스터마이징할 수 있습니다. 아울러 꼭 필요했던 내부 리팩토링이 진행되었고, 일부 기능의 제거 및 지원 중단(deprecation)도 함께 이루어졌습니다. 하지만 걱정하지 않으셔도 됩니다. 대부분의 API는 그대로 유지되었기 때문에, 대다수 사용자에게 업그레이드 과정은 비교적 간편하게 진행될 것입니다.
before_notify 콜백 소개
기존 버전의 honeybadger 젬은 보고되는 에러의 다양한 측면을 커스터마이징할 수 있는 세 가지 콜백을 제공해 왔습니다:
Honeybadger.backtrace_filter— Honeybadger에 보고되는 백트레이스(backtrace)를 수정하는 콜백Honeybadger.exception_fingerprint— Honeybadger에서 에러 그룹핑 방식을 조정하는 콜백Honeybadger.exception_filter— 해당 에러 리포트를 아예 전송하지 않을지 판단하는 콜백
그러나 이 콜백들을 제외하면, 예외를 직접 rescue하여 로컬에서 보고하는 경우가 아니라면 에러 메시지, 태그, 요청(request) 데이터 등 리포트의 다른 데이터를 전역적으로 변경할 방법이 없었습니다. 바로 이 지점에서 새로운 before_notify 콜백이 등장합니다. 새 콜백은 놀랄 만큼 유연해서 기존 세 가지 콜백을 모두 완벽하게 대체하며, 기존 콜백들은 이제 공식적으로 지원이 중단됩니다.
앞으로는 before_notify 콜백 하나만으로 위 작업은 물론 그 이상의 작업까지 모두 수행할 수 있습니다. 또한 여러 개의 콜백을 동시에 등록할 수 있어, Honeybadger를 설정할 때 한층 더 높은 유연성을 확보할 수 있습니다:
Honeybadger.configure do |config|
# 에러 리포트 무시하기
# Honeybadger.exception_filter 대체
config.before_notify do |notice|
notice.halt! if notice.controller == 'auth'
end
# 백트레이스 수정하기
# Honeybadger.backtrace_filter 대체
config.before_notify do |notice|
notice.backtrace.reject!{|l| l =~ /gem/ }
end
# 에러 그룹핑 커스터마이징
# Honeybadger.exception_fingerprint 대체
config.before_notify do |notice|
notice.fingerprint = 'new fingerprint'
end
# 모든 속성 변경하기!
config.before_notify do |notice|
notice.api_key = 'custom api key'
notice.error_message = "badgers!"
notice.error_class = 'MyError'
notice.backtrace = ["/path/to/file.rb:5 in `method'"]
notice.fingerprint = 'some unique string'
notice.tags = ['foo', 'bar']
notice.context = { user: 33 }
notice.controller = 'MyController'
notice.action = 'index'
notice.parameters = { q: 'badgers?' }
notice.session = { uid: 42 }
notice.url = "/badgers"
end
end
새로운 before_notify 콜백에 대해 큰 기대를 걸고 있으며, 이 기능이 앞으로 수많은 새로운 가능성을 열어 줄 것이라 믿습니다!
4.x로 업그레이드하기
3.x 버전을 사용 중인 대부분의 사용자라면 별다른 문제 없이 업그레이드를 마칠 수 있습니다. 다만 앞서 소개한 세 가지 콜백을 사용 중이라면 이를 before_notify 기반으로 교체해야 하며, 콜백에 전달되는 Notice 객체의 공개 API가 일부 변경되었으므로 몇 가지 사소한 코드 수정이 추가로 필요할 수 있습니다.
참고 자료:
- 3.x → 4.x 업그레이드 가이드
- 전체 CHANGELOG