Sha256: 92c66052a6e84d61e624c1cac245c02e5f3f5636cfeaa849e3bef6e0c67427e5

Contents?: true

Size: 981 Bytes

Versions: 93

Compression:

Stored size: 981 Bytes

Contents

#!/usr/bin/env ruby

module Flapjack

  class CommonLogger < Rack::CommonLogger

    alias_method :orig_log, :log

    private

    def log(env, status, header, began_at)
      ret = orig_log(env, status, header, began_at)
      @logger.flush if @logger.is_a?(Flapjack::AsyncLogger)
      ret
    end

  end

  # from http://stackoverflow.com/questions/6427033/how-do-i-log-asynchronous-thinsinatrarack-requests
 class AsyncLogger < ::Logger

    attr_accessor :messages

    def initialize(logdev, shift_age = 0, shift_size = 1048576)
      @messages = {}
      super(logdev, shift_age, shift_size)
    end

    def write(message)
      stack << message
    end

    def stack
      # This is the important async awareness
      # It stores messages for each fiber separately
      @messages[Fiber.current.object_id] ||= []
    end

    def flush
      stack.each do |msg|
        self.send(:"<<", msg)
      end
      @messages.delete(Fiber.current.object_id)
    end
  end

end

Version data entries

93 entries across 93 versions & 1 rubygems

Version Path
flapjack-1.6.0 lib/flapjack/rack_logger.rb
flapjack-1.6.0rc4 lib/flapjack/rack_logger.rb
flapjack-1.6.0rc3 lib/flapjack/rack_logger.rb
flapjack-1.6.0rc2 lib/flapjack/rack_logger.rb
flapjack-1.6.0rc1 lib/flapjack/rack_logger.rb
flapjack-1.5.0 lib/flapjack/rack_logger.rb
flapjack-1.5.0rc1 lib/flapjack/rack_logger.rb
flapjack-1.4.0 lib/flapjack/rack_logger.rb
flapjack-1.4.0rc1 lib/flapjack/rack_logger.rb
flapjack-1.3.0 lib/flapjack/rack_logger.rb
flapjack-1.3.0rc3 lib/flapjack/rack_logger.rb
flapjack-1.3.0rc2 lib/flapjack/rack_logger.rb
flapjack-1.3.0rc1 lib/flapjack/rack_logger.rb
flapjack-1.2.2 lib/flapjack/rack_logger.rb
flapjack-1.2.1 lib/flapjack/rack_logger.rb
flapjack-1.2.1rc3 lib/flapjack/rack_logger.rb
flapjack-1.2.1rc2 lib/flapjack/rack_logger.rb
flapjack-1.2.1rc1 lib/flapjack/rack_logger.rb
flapjack-1.2.0 lib/flapjack/rack_logger.rb
flapjack-0.9.6 lib/flapjack/rack_logger.rb