Sha256: f810b5adfa50be0b1960e8b89ce6ece2fc39a81348006096072d78651a893d8a

Contents?: true

Size: 1.43 KB

Versions: 12

Compression:

Stored size: 1.43 KB

Contents

module LogStashLogger
  module Device
    class Base
      attr_reader :io
      attr_accessor :sync
      attr_accessor :error_logger

      def initialize(opts={})
        @sync = opts[:sync]
        @error_logger = opts.fetch(:error_logger, LogStashLogger.configuration.default_error_logger)
      end

      def to_io
        @io
      end

      def write(message)
        write_one(message)
      end

      def write_one(message)
        @io.write(message)
      rescue => e
        if unrecoverable_error?(e)
          log_error(e)
          log_warning("unrecoverable error, aborting write")
        else
          raise
        end
      end

      def write_batch(messages, group = nil)
        messages.each do |message|
          write_one(message)
        end
      end

      def write_batch(messages, group = nil)
        messages.each do |message|
          @io.write(message)
        end
      end

      def flush
        @io && @io.flush
      end

      def close(opts = {})
        close!
      rescue => e
        log_error(e)
      end

      def close!
        @io && @io.close
      ensure
        @io = nil
      end

      def unrecoverable_error?(e)
        e.is_a?(JSON::GeneratorError)
      end

      private

      def log_error(e)
        error_logger.error "[#{self.class}] #{e.class} - #{e.message}"
      end

      def log_warning(message)
        error_logger.warn("[#{self.class}] #{message}")
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
logstash-logger-0.22.1 lib/logstash-logger/device/base.rb
logstash-logger-0.22.0 lib/logstash-logger/device/base.rb
logstash-logger-0.21.0 lib/logstash-logger/device/base.rb
logstash-logger-0.20.1 lib/logstash-logger/device/base.rb
logstash-logger-0.20.0 lib/logstash-logger/device/base.rb
logstash-logger-0.19.2 lib/logstash-logger/device/base.rb
logstash-logger-0.19.1 lib/logstash-logger/device/base.rb
logstash-logger-0.19.0 lib/logstash-logger/device/base.rb
logstash-logger-0.18.1 lib/logstash-logger/device/base.rb
logstash-logger-0.18.0 lib/logstash-logger/device/base.rb
logstash-logger-0.17.0 lib/logstash-logger/device/base.rb
logstash-logger-0.16.0 lib/logstash-logger/device/base.rb