Skip to content

Commit 74919e5

Browse files
Merge pull request #2198 from vparfonov/log1555
LOG-1555: call strip() only in case the object has that method
2 parents 25fbe33 + c4cb30a commit 74919e5

File tree

3 files changed

+37
-6
lines changed

3 files changed

+37
-6
lines changed

fluentd/lib/filter_parse_json_field/filter_parse_json_field.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ Gem::Specification.new do |gem|
2121
gem.add_development_dependency("rr", ["~> 1.0"])
2222
gem.add_development_dependency("test-unit", ["~> 3.2"])
2323
gem.add_development_dependency("test-unit-rr", ["~> 1.0"])
24+
gem.add_development_dependency("serverengine", ["2.2.1"])
2425
end

fluentd/lib/filter_parse_json_field/lib/filter_parse_json_field.rb

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ def filter_stream(tag, es)
6060
def do_merge_json_log(record)
6161
json_fields.each do |merge_json_log_key|
6262
if record.has_key?(merge_json_log_key)
63-
value = (record[merge_json_log_key] || "").strip
64-
if value.start_with?('{') && value.end_with?('}')
63+
value = record[merge_json_log_key] || ''
64+
value = value.strip if value.respond_to?(:strip)
65+
if value.respond_to?(:start_with?) && value.respond_to?(:end_with?) &&
66+
(value.start_with?('{') && value.end_with?('}'))
6567
begin
6668
record = JSON.parse(value).merge(record)
6769
unless @preserve_json_log
@@ -80,20 +82,21 @@ def do_merge_json_log(record)
8082
def do_replace_json_log(record)
8183
json_fields.each do |merge_json_log_key|
8284
if record.has_key?(merge_json_log_key)
83-
value = (record[merge_json_log_key] || "").strip
84-
if value.start_with?('{') && value.end_with?('}')
85+
value = record[merge_json_log_key] || ''
86+
value = value.strip if value.respond_to?(:strip)
87+
if value.respond_to?(:start_with?) && value.respond_to?(:end_with?) &&
88+
(value.start_with?('{') && value.end_with?('}'))
8589
begin
8690
parsed_value = JSON.parse(value)
8791
record[merge_json_log_key] = parsed_value
8892
rescue JSON::ParserError
8993
log.debug "parse_json_field could not parse field [#{merge_json_log_key}] as JSON: value [#{value}]"
9094
end
91-
end
95+
end
9296
break
9397
end
9498
end
9599
record
96100
end
97-
98101
end
99102
end

fluentd/lib/filter_parse_json_field/test/filter_parse_json_field_test.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,33 @@ def emit_with_tag(tag, msg={}, conf='')
134134
')
135135
assert_equal({'a'=>{'b'=>'c'}, 'd'=>['e', 'f'], 'g'=>97, 'h'=>{'i'=>'j'}}, rec['message'])
136136
end
137+
test 'replace json field no raising NoMethodError for Number' do
138+
json_string_val = 100
139+
orig_a_value = 'orig a value'
140+
assert_nothing_raised(NoMethodError) {
141+
emit_with_tag('tag', {'message'=>json_string_val, 'a'=>orig_a_value},'
142+
merge_json_log false
143+
replace_json_log true
144+
json_fields message
145+
')
146+
}
147+
end
148+
test 'replace json field no raising NoMethodError for Hash' do
149+
json_string_val = {
150+
1 => ['a', 'b'],
151+
2 => ['c'],
152+
3 => ['d', 'e', 'f', 'g'],
153+
4 => ['h']
154+
}
155+
orig_a_value = 'orig a value'
156+
assert_nothing_raised(NoMethodError) {
157+
emit_with_tag('tag', {'message'=>json_string_val, 'a'=>orig_a_value},'
158+
merge_json_log false
159+
replace_json_log true
160+
json_fields message
161+
')
162+
}
163+
end
137164
test 'no fallback if parsing error in given field' do
138165
# test that - skip1 is skipped, skip2 is attempted to parse and fail
139166
# jsonfield is skipped - message is logged at debug level

0 commit comments

Comments
 (0)