Skip to content

Commit

Permalink
output: Replace ${chunk_id} before logging warning.
Browse files Browse the repository at this point in the history
The updated implementation makes sure to replace instances of
${chunk_id} prior to looking for and warning on unreplaced keys in the
pattern. Prior to this, a warning line was printed for every chunk that
was flushed even though nothing was actually wrong (replacement happened
right after).

Signed-off-by: Brian Atkinson <brian@atkinson.mn>
  • Loading branch information
nairb774 committed Oct 8, 2020
1 parent 436c7da commit f18640b
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
12 changes: 7 additions & 5 deletions lib/fluent/plugin/output.rb
Original file line number Diff line number Diff line change
Expand Up @@ -769,17 +769,19 @@ def extract_placeholders(str, chunk)
end
end

if rvalue =~ CHUNK_KEY_PLACEHOLDER_PATTERN
log.warn "chunk key placeholder '#{$1}' not replaced. template:#{str}"
end

rvalue.sub(CHUNK_ID_PLACEHOLDER_PATTERN) {
rvalue = rvalue.sub(CHUNK_ID_PLACEHOLDER_PATTERN) {
if chunk_passed
dump_unique_id_hex(chunk.unique_id)
else
log.warn "${chunk_id} is not allowed in this plugin. Pass Chunk instead of metadata in extract_placeholders's 2nd argument"
end
}

if rvalue =~ CHUNK_KEY_PLACEHOLDER_PATTERN
log.warn "chunk key placeholder '#{$1}' not replaced. template:#{str}"
end

rvalue
end
end

Expand Down
12 changes: 12 additions & 0 deletions test/plugin/test_output.rb
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,18 @@ def waiting(seconds)
assert { logs.any? { |log| log.include?("${chunk_id} is not allowed in this plugin") } }
end

test '#extract_placeholders does not log for ${chunk_id} placeholder' do
@i.configure(config_element('ROOT', '', {}, [config_element('buffer', '')]))
tmpl = "/mypath/${chunk_id}/tail"
t = event_time('2016-04-11 20:30:00 +0900')
v = {key1: "value1", key2: "value2"}
c = create_chunk(timekey: t, tag: 'fluentd.test.output', variables: v)
@i.log.out.logs.clear
@i.extract_placeholders(tmpl, c)
logs = @i.log.out.logs
assert { logs.none? { |log| log.include?("${chunk_id}") } }
end

test '#extract_placeholders logs warn message with not replaced key' do
@i.configure(config_element('ROOT', '', {}, [config_element('buffer', '')]))
tmpl = "/mypath/${key1}/test"
Expand Down

0 comments on commit f18640b

Please sign in to comment.