logstash过滤器编码字符失败

时间:2015-01-21 09:52:33

标签: ruby encoding elasticsearch logstash

我们在GB18030字符集中有一个日志,我们希望在从logstash发送到elasticsearch时将日志编码为UTF8。从logstash网站上阅读文档后,我们发现过滤器可以为我们做到这一点。我之前从未使用过RUBY,我从logstash网站复制了一个logstash过滤器并进行了一些修改。

# Call this file 'foo.rb' (in logstash/filters, as above)
require "logstash/filters/base"
require "logstash/namespace"
require "logstash/environment"

class LogStash::Filters::Foo < LogStash::Filters::Base

  # Setting the config_name here is required. This is how you
  # configure this filter from your logstash config.
  #
  # filter {
  #   foo { ... }
  # }
  config_name "foo"
  attr_accessor :logger

  # New plugins should start life at milestone 1.
  milestone 1


  public
  def register
    # nothing to do
  end # def register

  public
  def filter(event)
    # return nothing unless there's an actual filter event
    return unless filter?(event)
    # Replace the event message with our message as configured in the
    # config file.
    a = event["message"].force_encoding("GB18030")
    $stdout.write("\n origin:"+a+"\n")
    $stdout.write("\n encoded:+ a.encode("UTF-8","GB18030")+"\n\n")
    event["message"] = event["message"].encode("UTF-8","GB18030")
    # filter_matched should go in the last line of our successful code
    filter_matched(event)
  end # def filter
end # class LogStash::Filters::Foo

这是屏幕输出

起源:\ XA1 \ XA2 \ XD3 \ xFE如果] \ XCA \ XFD \ XBE \的xDD \ XD5 \ XFD \ XD4 \ XD3 \ XCA \ XFD \ XBE \ XE2 \ XBC \ XD3 编码:\ XA1 \ XA2 \ XD3 \ xFE如果] \ XCA \ XFD \ XBE \的xDD \ XD5 \ XFD \ XD4 \ XD3 \ XCA \ XFD \ XBE \ XE2 \ XBC \ XD3

似乎&#34;编码&#34;功能没有用。我尝试在RUBY2.1.5解释器中编码上面的字符串,它工作正常。

0 个答案:

没有答案