class RequestLogger

Captures information around request

Public Class Methods

new(app, filtered_params = []) click to toggle source
# File lib/sensible_logging/middlewares/request_logger.rb, line 7
def initialize(app, filtered_params = [])
  @app = app
  @filtered_params = filtered_params
end

Public Instance Methods

call(env) click to toggle source
# File lib/sensible_logging/middlewares/request_logger.rb, line 12
def call(env) # rubocop:disable Metrics/AbcSize
  req = Rack::Request.new(env)
  start_time = Time.now
  status, headers, body = @app.call(env)
  end_time = Time.now - start_time

  client_ip = req.ip || 'n/a'

  message = "method=#{req.request_method} path=#{req.path} client=#{client_ip} status=#{status} duration=#{end_time}"
  filtered_params = filter_params(req)
  message += " params=#{filtered_params}" if req.get? && !filtered_params.empty?
  env['logger'].info(message)
  [status, headers, body]
end

Private Instance Methods

filter_params(req) click to toggle source
# File lib/sensible_logging/middlewares/request_logger.rb, line 29
def filter_params(req)
  req.params.reject { |x| @filtered_params.include?(x) }
end