class FaradayMiddleware::HttpLogger

Log all request to logger, filter login and password

Public Class Methods

new(app, logger) click to toggle source

Create middleware object

params app [Faraday::Adapter::NetHttp] faraday adapter params logger [Logger] middleware logger

# File lib/faraday_middleware/http_logger.rb, line 15
def initialize(app, logger)
  @app = app
  @logger = logger
end

Public Instance Methods

call(env) click to toggle source

Log request to logger

@param env [Faraday::Env] middleware environment

# File lib/faraday_middleware/http_logger.rb, line 24
def call(env)
  start_time = Time.now
  info  { request_info(env) }
  debug { "Request headers: #{env[:request_headers].inspect}" }
  @app.call(env).on_complete do
    end_time = Time.now
    response_time = end_time - start_time
    info  { response_info(env, response_time) }
    debug { "Response headers: #{env[:response_headers].inspect}" }
    debug { "Response body: #{env[:body].delete("\n")}" }
  end
end

Private Instance Methods

filter(output) click to toggle source
# File lib/faraday_middleware/http_logger.rb, line 39
def filter(output)
  output = output.to_s.gsub(/login=[a-zA-Z0-9_]*/, 'login=[LOGIN]')
  output.to_s.gsub(/psw=[a-zA-Z0-9_]*/, 'psw=[PASSWORD]')
end
request_info(env) click to toggle source
# File lib/faraday_middleware/http_logger.rb, line 44
def request_info(env)
  format('Started %s request to: %s', env[:method].to_s.upcase, filter(env[:url]))
end
response_info(env, response_time) click to toggle source
# File lib/faraday_middleware/http_logger.rb, line 48
def response_info(env, response_time)
  format('Response from %s; Status: %d; Time: %.1fms', filter(env[:url]), env[:status], (response_time * 1_000.0))
end