Sha256: 6b9c17f25f3c0c362679e71ac93e6cc3e0a24217215b5a3a017e70875c300906

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

require 'faraday'

# @private
module FaradayMiddleware
  # @private
  class HttpLogger < Faraday::Middleware
    extend Forwardable
    def_delegators :@logger, :debug, :info, :warn, :error, :fatal

    def initialize(app, logger)
      @app = app
      @logger = logger
    end

    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

    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

    def request_info(env)
      format('Started %s request to: %s', env[:method].to_s.upcase, filter(env[:url]))
    end

    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
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
smsc_ru-0.1.0 lib/faraday_middleware/http_logger.rb