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