Sha256: 6929f829e4b9affb82756c0740a54998ac025b949b744c2206fd7a4b798bf0d1

Contents?: true

Size: 1.02 KB

Versions: 5

Compression:

Stored size: 1.02 KB

Contents

require 'rack/commonlogger'
require 'lines'

module Lines
  class RackLogger < Rack::CommonLogger
    # In development mode the common logger is always inserted
    def self.silence_common_logger!
      Rack::CommonLogger.module_eval("def call(env); @app.call(env); end")
    end

    def initialize(app)
      @app = app
    end

    def call(env)
      began_at = Time.now
      status, header, body = @app.call(env)
      header = Rack::Utils::HeaderHash.new(header)
      body = Rack::BodyProxy.new(body) { log(env, status, header, began_at) }
      [status, header, body]
    end

    protected

    def log(env, status, header, began_at)
      Lines.log(
        remote_addr: env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"],
        remote_user: env['REMOTE_USER'] || '',
        method: env['REQUEST_METHOD'],
        path: env['PATH_INFO'],
        query:  env["QUERY_STRING"],
        status: status.to_s[0..3],
        length: extract_content_length(header),
        elapsed: [Time.now - began_at, 's'],
      )
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
lines-0.1.20 lib/lines/rack_logger.rb
lines-0.1.19 lib/lines/rack_logger.rb
lines-0.1.18 lib/lines/rack_logger.rb
lines-0.1.16 lib/lines/rack_logger.rb
lines-0.1.15 lib/lines/rack_logger.rb