How to Write Parser Plugin
<timestamp><SPACE>key1=value1<DELIMITER>key2=value2<DELIMITER>key3=value...2014-04-01T00:00:00 name=jake age=100 action=debuggingrequire 'fluent/plugin/parser'
module Fluent::Plugin
class TimeKeyValueParser < Parser
# Register this parser as 'time_key_value'
Fluent::Plugin.register_parser('time_key_value', self)
# `delimiter` is configurable with ' ' as default
config_param :delimiter, :string, default: ' '
# `time_format` is configurable
config_param :time_format, :string, default: nil
def configure(conf)
super
if @delimiter.length != 1
raise ConfigError, "delimiter must be a single character. #{@delimiter} is not."
end
# `TimeParser` class is already available.
# It takes a single argument as the time format
# to parse the time string with.
@time_parser = Fluent::TimeParser.new(@time_format)
end
def parse(text)
time, key_values = text.split(' ', 2)
time = @time_parser.parse(time)
record = {}
key_values.split(@delimiter).each do |kv|
k, v = kv.split('=', 2)
record[k] = v
end
yield time, record
end
end
endHow To Use Parsers From Plugins
Methods
#parse(text, &block)
#parse(text, &block)Writing Tests
Overview of Tests
Last updated
Was this helpful?