Sha256: c8394f946d1c733a626e43e443fe58f7f535a454231396353dcdfbe7b60f6b53

Contents?: true

Size: 1.87 KB

Versions: 6

Compression:

Stored size: 1.87 KB

Contents

require 'forwardable'

class DefaultLogger < Faraday::Middleware
      extend Forwardable

      def_delegators :@logger, :debug, :info, :warn, :error, :fatal

      def initialize(app, options = {})
        @app = app
        @logger = options.fetch(:logger) {
          require 'logger'
          ::Logger.new($stderr)
        }
      end

      def call(env)
        start_time = Time.now
        info  request_info(env)
        request_debug(env)

        @app.call(env).on_complete do
          end_time = Time.now
          response_time = end_time - start_time
          info  response_info(env, response_time)
          response_debug(env)
        end
      end

      private

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

      def response_info(env, response_time)
        "Response from %s; Status: %d; Time: %.1fms" % [ env[:url], env[:status], (response_time * 1_000.0) ]
      end

      def request_debug(env)
        request_headers = obfuscate_auth env[:request_headers]

        debug_request_response("Request", request_headers, env[:body])
      end

      def obfuscate_auth(headers)
        headers.dup.tap do |h|
          if auth = h["Authorization"]
            #display first few and last few characters
            h["Authorization"] = "#{auth[0..10]}****#{auth[-4..-1]}"
          end
        end
      end

      def response_debug(env)
        debug_request_response("Response", env[:response_headers], env[:body])
      end

      def debug_request_response(name, headers, body)
        debug "#{name} headers: #{JSON.generate headers}"
        debug "#{name} body: #{format_body body}"
      end

      def format_body(body)
        return '' unless body
        JSON.generate JSON.parse Array(body).join("\n")
      rescue JSON::ParserError
        Array(body).join("\n").gsub /\n/, '\n'
      end
    end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
shutl_resource-2.0.2 lib/shutl/resource/default_logger.rb
shutl_resource-2.0.1 lib/shutl/resource/default_logger.rb
shutl_resource-2.0.0 lib/shutl/resource/default_logger.rb
shutl_resource-1.9.1 lib/shutl/resource/default_logger.rb
shutl_resource-1.9.0 lib/shutl/resource/default_logger.rb
shutl_resource-1.8.2 lib/shutl/resource/default_logger.rb