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

Simplify field serialization of Lograge encoder

This commit is contained in:
Holger Just 2018-01-30 23:03:04 +01:00
parent 58b58cfe4a
commit 4ee7a3f967

View File

@ -84,14 +84,16 @@ module Rackstash
private private
def format_error(event) def format_error(event)
error = event[FIELD_ERROR] error = event[FIELD_ERROR] || nil
error_message = event.delete(FIELD_ERROR_MESSAGE) error_message = event.delete(FIELD_ERROR_MESSAGE) || nil
event[FIELD_ERROR] = event[FIELD_ERROR] =
if error.nil? if error && error_message
error_message.nil? ? nil : "'#{error_message}'" "'#{error}: #{error_message}'"
elsif error || error_message
"'#{error || error_message}'"
else else
error_message.nil? ? "'#{error}'" : "'#{error}: #{error_message}'" nil
end end
end end
@ -101,40 +103,34 @@ module Rackstash
end end
end end
def serialize_hash(hash, prefix: nil) def serialize_hash(hash)
hash.map { |key, value| serialized_hash = {}
serialize_pair(key, value, prefix) hash.each_pair do |key, value|
}.compact.join(' '.freeze)
end
def serialize_array(array, prefix: nil)
array.each_with_index.map { |value, index|
serialize_pair(index.to_s, value, prefix)
}.compact.join(' '.freeze)
end
def serialize_pair(key, value, prefix)
if prefix
key = "#{prefix}.#{key}"
elsif key == FIELD_TIMESTAMP
# Use 'timestamp' instead of '@timestamp' on the top-level # Use 'timestamp' instead of '@timestamp' on the top-level
key = 'timestamp' key = 'timestamp'.freeze if key == FIELD_TIMESTAMP
add_serialized_field(serialized_hash, key.to_s, value)
end end
serialized_hash.map { |key, value| "#{key}=#{value}" }.join(' '.freeze)
end
def add_serialized_field(result, key, value)
case value case value
when nil when nil
return # Don't add nil values anywhere.
when ::Hash when ::Hash
return if value.empty? value.each_pair do |hash_key, hash_value|
return serialize_hash(value, prefix: key) add_serialized_field(result, "#{key}.#{hash_key}".freeze, hash_value)
end
when ::Array when ::Array
return if value.empty? value.each_with_index do |array_value, index|
return serialize_array(value, prefix: key) add_serialized_field(result, "#{key}.#{index}".freeze, array_value)
when Float end
value = Kernel.format('%.2f'.freeze, value) when ::Float
result[key] = Kernel.format('%.2f'.freeze, value)
else
result[key] = value
end end
"#{key}=#{value}"
end end
end end