class LogStash::Filters::CSV

CSV filter. Takes an event field containing CSV data, parses it, and stores it as individual fields (can optionally specify the names).

Public Instance Methods

filter(event) click to toggle source
# File lib/logstash/filters/csv.rb, line 45
def filter(event)
  return unless filter?(event)

  @logger.debug("Running csv filter", :event => event)

  matches = 0

  if event[@source]
    if event[@source].is_a?(String)
      event[@source] = [event[@source]]
    end

    if event[@source].length > 1
      @logger.warn("csv filter only works on fields of length 1",
                   :source => @source, :value => event[@source],
                   :event => event)
      return
    end

    raw = event[@source].first
    begin
      values = CSV.parse_line(raw, :col_sep => @separator, :quote_char => @quote_char)

      if @target.nil?
        # Default is to write to the root of the event.
        dest = event
      else
        dest = event[@target] ||= {}
      end

      values.each_index do |i|
        field_name = @columns[i] || "column#{i+1}"
        dest[field_name] = values[i]
      end

      filter_matched(event)
    rescue => e
      event.tag "_csvparsefailure"
      @logger.warn("Trouble parsing csv", :source => @source, :raw => raw,
                    :exception => e)
      return
    end # begin
  end # if event

  @logger.debug("Event after csv filter", :event => event)

end
register() click to toggle source
# File lib/logstash/filters/csv.rb, line 38
def register

  # Nothing to do here

end