Sha256: 5519399042cedc92f784e987a0fecff41e7a8ccdb81140860ddae8d137418da0

Contents?: true

Size: 1.75 KB

Versions: 4

Compression:

Stored size: 1.75 KB

Contents

require 'logger'
require 'rack/request'
require 'active_support/core_ext/class/attribute_accessors'


module MongoRequestLogger
  class Rack
    cattr_accessor :logger
    cattr_accessor :ignore_prefixes

    def self.ignore_prefix prefix
      self.ignore_prefixes ||= []
      self.ignore_prefixes << prefix
    end

    self.ignore_prefix '/log'   # TODO: dynamically detect this?

    def initialize(app, options = {})
      @app = app
      @options = options
    end

    def logger
      self.class.logger
    end

    def call(env)
      #HACK: Don't log the log viewer itself
      self.class.ignore_prefixes.each do |prefix|
        if env["PATH_INFO"].to_s.start_with? prefix
          return @app.call(env)
        end
      end
      # TODO: filter parameters
      # KLUDGE: this will cause parameter parsing to happen twice: once here, once later on in Rails.
      # Or maybe it's automatically cached in env?
      logger.log_request do
        begin
          request = ::Rack::Request.new(env)
          options = {
              path: request.path_info,
              host: request.host_with_port,
              user_agent: request.user_agent,
              ip: request.ip,
              referer: request.referrer,
              query_string: request.query_string,
              request_method: request.request_method,
              content_type: request.content_type,
              params: request.params
          }
          logger.add_metadata options
          logger.add_metadata_set :tags, "rack"
          status, headers, body = @app.call(env)
          logger.add_metadata response: status.to_i
          [status, headers, body]
        rescue Exception => e
          logger.add_metadata response: 500
          raise
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
mongo_request_logger-0.2.2 lib/mongo_request_logger/rack.rb
mongo_request_logger-0.2.1 lib/mongo_request_logger/rack.rb
mongo_request_logger-0.2.0 lib/mongo_request_logger/rack.rb
mongo_request_logger-0.1.0 lib/mongo_request_logger/rack.rb