class Ramverk::Middleware::RequestLogger

Request logger based on `Rack::CommonLogger`.

Each request will output in the following format:

web: [200] GET /books/5 from 120.0.0.1 in 0.0032 with {"id"=>"5"}

Constants

FORMAT

@private

Public Class Methods

new(app, logger, filter_params = []) click to toggle source

@private

Calls superclass method
# File lib/ramverk/middleware/request_logger.rb, line 17
def initialize(app, logger, filter_params = [])
  @filter_params = filter_params

  super(app, logger)
end

Private Instance Methods

filter(params) click to toggle source

@private

# File lib/ramverk/middleware/request_logger.rb, line 46
def filter(params)
  filtered_params = params.dup

  filtered_params.each do |k, v|
    if v.is_a?(Hash)
      filtered_params[k] = filter(v)
    elsif @filter_params.include?(k)
      filtered_params[k] = "[FILTERED]"
    end
  end

  filtered_params
end
log(env, status, _, began_at) click to toggle source

@private rubocop:disable Metrics/AbcSize

# File lib/ramverk/middleware/request_logger.rb, line 27
def log(env, status, _, began_at)
  req = Rack::Request.new(env)

  params = (env["router.params"] || {}).merge(req.params)

  msg = format(FORMAT,
               app: env["ramverk.application"],
               verb: req.request_method,
               status: status.to_s[0..3],
               path: req.path,
               ip: req.ip,
               time: Rack::Utils.clock_time - began_at,
               params: params.empty? ? "{}" : filter(params))

  @logger.info(msg)
end