我有以下Fluentd插件代码:
require 'avro'
module Fluent
module TextFormatter
class Sample
end
class AvroFormatter < Formatter
Fluent::Plugin.register_formatter('avro', self)
config_param :schema_file, :string, :default => nil
config_param :schema_json, :string, :default => nil
def configure(conf)
super
if not (@schema_json.nil? ^ @schema_file.nil?) then
raise Fluent::ConfigError, 'schema_json or schema_file (but not both) is required'
end
if @schema_json.nil? then
@schema_json = File.read(@schema_file)
end
@schema = Avro::Schema.parse(@schema_json)
end
def format(tag, time, record)
handler = Sample.new()
end
end
end
end
我需要在 def “Format”中实例化 class “Sample”。问题是,当我尝试对Fluentd进行http POST时,会出现以下错误:
failed: error_class=NoMethodError error="undefined method `bytesize'
仅在实例化类“Sample”时才会出现此错误。我是红宝石的新手,我不知道问题出在哪里。我应该在另一个文件中创建类“Sample”吗?
答案 0 :(得分:1)
我认为您收到此错误是因为调用format
的代码需要字符串结果,而是获取Sample
类的实例。尝试返回一些字符串。
您也可以在此处使用此示例:http://docs.fluentd.org/articles/plugin-development#text-formatter-plugins。