diff --git a/lib/rollbar.rb b/lib/rollbar.rb index 210819cd..54eab256 100644 --- a/lib/rollbar.rb +++ b/lib/rollbar.rb @@ -573,7 +573,11 @@ def do_write_payload(payload) end def send_failsafe(message, exception) - body = failsafe_body(message, exception) + exception_reason = failsafe_reason(message, exception) + + log_error "[Rollbar] Sending failsafe response due to #{exception_reason}" + + body = failsafe_body(exception_reason) failsafe_data = { :level => 'error', @@ -605,9 +609,8 @@ def send_failsafe(message, exception) failsafe_payload end - def failsafe_body(message, exception) - body = 'Failsafe from rollbar-gem. ' - log_error "[Rollbar] Sending failsafe response due to #{message}." + def failsafe_reason(message, exception) + body = '' if exception begin @@ -618,8 +621,6 @@ def failsafe_body(message, exception) exception_info += " in #{nearest_frame}" if nearest_frame body += "#{exception_info}: #{message}" - - log_error "[Rollbar] #{body}" rescue end else @@ -632,6 +633,10 @@ def failsafe_body(message, exception) body end + def failsafe_body(reason) + "Failsafe from rollbar-gem. #{reason}" + end + def schedule_payload(payload) return if payload.nil? diff --git a/spec/rollbar_spec.rb b/spec/rollbar_spec.rb index 50e87497..bdce7c3d 100644 --- a/spec/rollbar_spec.rb +++ b/spec/rollbar_spec.rb @@ -1586,14 +1586,20 @@ def backtrace context 'if the exception has a backtrace' do let(:backtrace) { ['func3', 'func2', 'func1'] } + let(:failsafe_reason) { 'StandardError in func3: test failsafe' } + let(:expected_body) { "Failsafe from rollbar-gem. #{failsafe_reason}" } + let(:expected_log_message) do + "[Rollbar] Sending failsafe response due to #{failsafe_reason}" + end before { exception.set_backtrace(backtrace) } it 'adds the nearest frame to the message' do + expect(notifier).to receive(:log_error).with(expected_log_message) + sent_payload = notifier.send(:send_failsafe, "test failsafe", exception) - expected_message = 'Failsafe from rollbar-gem. StandardError in func3: test failsafe' - expect(sent_payload['data'][:body][:message][:body]).to be_eql(expected_message) + expect(sent_payload['data'][:body][:message][:body]).to be_eql(expected_body) end end end