How to Write Formatter Plugin
Last updated
Was this helpful?
Last updated
Was this helpful?
Fluentd supports for output plugins. The plugin filenames starting with formatter_
are registered as Formatter Plugins.
See for more details on the common APIs of all the plugins.
Following is an example of a custom formatter (formatter_my_csv.rb
) that outputs events in CSV format. It takes a required parameter called csv_fields
and outputs the fields. It assumes that the values of the fields are valid CSV fields.
Save this as formatter_my_csv.rb
in a loadable plugin path.
With out_file
output plugin:
For a matched record e.g. {"k1": 100, "k2": 200}
, the output CSV file would look like this:
Formatter plugins are designed to be used from other plugins, like Input, Filter and Output. Formatter plugin helper helps achieve this:
The formatter plugins implement filter
method to format the input Hash
record as a String
object.
#format(tag, time, record)
It receives an event represented by tag
, time
and record
; and, after formatting returns a String
object.
Formatter plugins must implement this method.
Fluentd formatter plugin has one or more points to be tested. Others (parsing configurations, controlling buffers, retries, flushes and many others) are controlled by the Fluentd core.
Fluentd also provides test driver for plugins. You can write tests for your own plugins very easily:
Testing for formatter plugins is mainly for:
Validation of configuration parameters (i.e. #configure
)
Validation of the formatted records
To make testing easy, the plugin test driver provides a logger and the functionality to override the system, parser and other configurations.
The lifecycle of the plugin and its test driver is:
Instantiate plugin driver which then instantiates the plugin
Configure plugin
Run test code
Assert results of tests by data provided by the driver
For:
configuration tests, repeat steps # 1-2
full feature tests, repeat step # 1-4
See for details.
For more details, see .
If this article is incorrect or outdated, or omits critical information, please . is an open-source project under . All components are available under the Apache 2 License.