Sha256: 014a4f0e9e39de48d2d60a5ea8bf9cb5a9be06a7b88e66a31a33cb847bff1ea1

Contents?: true

Size: 871 Bytes

Versions: 3

Compression:

Stored size: 871 Bytes

Contents

require 'iowa/Logger'

module Iowa
  module Loggers
    class AsyncLogger < Iowa::Logger
      def initialize
        @queue = []
        @periodic_flush = Thread.start { flush_periodically }
        super
      end

      def debug(msg)
        @queue << [:debug,msg]
      end

      def info(msg)
        @queue << [:info,msg]
      end

      def warn(msg)
        @queue << [:warn,msg]
      end

      def error(msg)
        @queue << [:error,msg]
      end

      def fatal(msg)
        @queue << [:fatal,msg]
      end

      def close
        @periodic_flush.stop
        flush
        super
      end

      def flush_periodically
        loop do
          sleep 1
          flush
        end
      end

      def flush
        while msg = @queue.shift
          @logger.__send__(msg.first,msg.last)
          msg = nil
        end
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
IOWA-1.0.3 src/iowa/loggers/AsyncLogger.rb
IOWA-1.0.2 src/iowa/loggers/AsyncLogger.rb
IOWA-1.0.0 src/iowa/loggers/AsyncLogger.rb