Skip to content

Commit

Permalink
Merge pull request #3288 from ashie/ltsv-escape
Browse files Browse the repository at this point in the history
formatter_ltsv: suppress delimiters in output
  • Loading branch information
ashie committed Mar 9, 2021
2 parents dcc47e8 + 7d94ae0 commit 3e812a8
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lib/fluent/plugin/formatter_ltsv.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ class LabeledTSVFormatter < Formatter

config_param :delimiter, :string, default: "\t".freeze
config_param :label_delimiter, :string, default: ":".freeze
config_param :replacement, :string, default: " ".freeze
config_param :add_newline, :bool, default: true

# TODO: escaping for \t in values
def format(tag, time, record)
formatted = ""
record.each do |label, value|
formatted << @delimiter if formatted.length.nonzero?
formatted << "#{label}#{@label_delimiter}#{value}"
formatted << "#{label}#{@label_delimiter}#{value.to_s.gsub(@delimiter, @replacement)}"
end
formatted << @newline if @add_newline
formatted
Expand Down
30 changes: 30 additions & 0 deletions test/test_formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,36 @@ def test_format_with_customized_delimiters

assert_equal("message=awesome,greeting=hello#{@newline}", formatted)
end

def record_with_tab
{'message' => "awe\tsome", 'greeting' => "hello\t"}
end

def test_format_suppresses_tab
@formatter.configure({})
formatted = @formatter.format(tag, @time, record_with_tab)

assert_equal("message:awe some\tgreeting:hello \n", formatted)
end

def test_format_suppresses_tab_custom_replacement
@formatter.configure(
'replacement' => 'X',
)
formatted = @formatter.format(tag, @time, record_with_tab)

assert_equal("message:aweXsome\tgreeting:helloX\n", formatted)
end

def test_format_suppresses_custom_delimiter
@formatter.configure(
'delimiter' => 'w',
'label_delimiter' => '=',
)
formatted = @formatter.format(tag, @time, record)

assert_equal("message=a esomewgreeting=hello\n", formatted)
end
end

class CsvFormatterTest < ::Test::Unit::TestCase
Expand Down

0 comments on commit 3e812a8

Please sign in to comment.