error_class = NoMethodError error =“未定义的方法`bytesize'Fluentd

时间:2015-10-08 15:25:23

标签: ruby fluentd

我有以下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”吗?

1 个答案:

答案 0 :(得分:1)

我认为您收到此错误是因为调用format的代码需要字符串结果,而是获取Sample类的实例。尝试返回一些字符串。

您也可以在此处使用此示例:http://docs.fluentd.org/articles/plugin-development#text-formatter-plugins