1
0
mirror of https://github.com/meineerde/rackstash.git synced 2025-10-17 14:01:01 +00:00

Log the original event to the error_flow if Flow#write raises an error

This commit is contained in:
Holger Just 2018-12-05 18:53:25 +01:00
parent 0967593010
commit 26a1ce0a68
2 changed files with 8 additions and 4 deletions

View File

@ -345,7 +345,7 @@ module Rackstash
@adapter.write @encoder.encode(event)
true
rescue Exception => exception
log_error("write failed for adapter #{adapter.inspect}", exception)
log_error("write failed for adapter #{adapter.inspect}", exception, event)
raise unless exception.is_a?(StandardError)
raise if synchronous?
end
@ -354,7 +354,7 @@ module Rackstash
private
def log_error(message, exception)
def log_error(message, exception, event = nil)
message = Rackstash::Message.new(message, severity: ERROR)
error_event = {
@ -366,6 +366,8 @@ module Rackstash
FIELD_MESSAGE => [message],
FIELD_TIMESTAMP => message.time
}
error_event['event'] = event unless event.nil?
error_flow.write(error_event)
rescue
# At this place, writing to the error log has also failed. This is a bad

View File

@ -488,7 +488,8 @@ RSpec.describe Rackstash::Flow do
'error_trace' => instance_of(String),
'tags' => [],
'message' => [instance_of(Rackstash::Message)],
'@timestamp' => instance_of(Time)
'@timestamp' => instance_of(Time),
'event' => event
)
expect(adapter).to receive(:write).and_raise('ERROR')
expect { flow.write(event) }.not_to raise_error
@ -521,7 +522,8 @@ RSpec.describe Rackstash::Flow do
'error_trace' => instance_of(String),
'tags' => [],
'message' => [instance_of(Rackstash::Message)],
'@timestamp' => instance_of(Time)
'@timestamp' => instance_of(Time),
'event' => event
)
expect(adapter).to receive(:write).and_raise('ERROR')