lib/logstash/codecs/line.rb in logstash-codec-line-3.0.8 vs lib/logstash/codecs/line.rb in logstash-codec-line-3.1.0

- old
+ new

@@ -1,15 +1,22 @@ # encoding: utf-8 require "logstash/codecs/base" require "logstash/util/charset" +require 'logstash/plugin_mixins/ecs_compatibility_support' +require 'logstash/plugin_mixins/event_support/event_factory_adapter' + # Line-oriented text data. # # Decoding behavior: Only whole line events will be emitted. # # Encoding behavior: Each event will be emitted with a trailing newline. class LogStash::Codecs::Line < LogStash::Codecs::Base + + include LogStash::PluginMixins::ECSCompatibilitySupport(:disabled, :v1, :v8 => :v1) + include LogStash::PluginMixins::EventSupport::EventFactoryAdapter + config_name "line" # Set the desired text format for encoding. config :format, :validate => :string @@ -23,30 +30,46 @@ config :charset, :validate => ::Encoding.name_list, :default => "UTF-8" # Change the delimiter that separates lines config :delimiter, :validate => :string, :default => "\n" + def initialize(*params) + super + + @original_field = ecs_select[disabled: nil, v1: '[event][original]'] + end + MESSAGE_FIELD = "message".freeze def register require "logstash/util/buftok" @buffer = FileWatch::BufferedTokenizer.new(@delimiter) @converter = LogStash::Util::Charset.new(@charset) @converter.logger = @logger end def decode(data) - @buffer.extract(data).each { |line| yield LogStash::Event.new(MESSAGE_FIELD => @converter.convert(line)) } + @buffer.extract(data).each { |line| yield new_event_from_line(line) } end def flush(&block) remainder = @buffer.flush if !remainder.empty? - block.call(LogStash::Event.new(MESSAGE_FIELD => @converter.convert(remainder))) + block.call new_event_from_line(remainder) end end def encode(event) encoded = @format ? event.sprintf(@format) : event.to_s @on_event.call(event, encoded + @delimiter) end + + private + + def new_event_from_line(line) + message = @converter.convert(line) + event = event_factory.new_event MESSAGE_FIELD => message + event.set @original_field, message.dup.freeze if @original_field + event + end + end