我们在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解释器中编码上面的字符串,它工作正常。