Sha256: 84ef9c1b634d2719edd2d7616afb8481c01cf79dbb56b584a0085473cebc74c0

Contents?: true

Size: 1.06 KB

Versions: 7

Compression:

Stored size: 1.06 KB

Contents

module TMS #:nodoc:
  class Logger < Faraday::Response::Middleware #:nodoc:
    extend Forwardable

    def initialize(app, logger = nil)
      super(app)
      @logger = logger || begin
        require 'logger'
        ::Logger.new(STDOUT)
      end
    end

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

    def call(env)
      debug "performing #{env[:method].to_s.upcase.ljust(7)} #{env[:url]}"

      start = Time.now

      # In order to log request duration in a threadsafe way, `start` must be a local variable instead of instance variable.
      @app.call(env).on_complete do |environment|
        on_complete(environment)
        log_stuff(start, environment)
      end
    end

    private

    def log_stuff(start, environment)
      duration = Time.now - start
      info "#{environment[:method].to_s.upcase.ljust(7)}#{environment[:status].to_s.ljust(4)}#{environment[:url]} (#{duration} seconds)"
      debug('response headers') { JSON.pretty_generate environment[:response_headers] }
      debug('response body') { environment[:body] }
    end
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
govdelivery-tms-0.8.0 lib/govdelivery-tms/logger.rb
tms_client-0.6.0 lib/tms_client/logger.rb
tms_client-0.5.4 lib/tms_client/logger.rb
tms_client-0.5.3 lib/tms_client/logger.rb
tms_client-0.5.2 lib/tms_client/logger.rb
tms_client-0.5.1 lib/tms_client/logger.rb
tms_client-0.4.1 lib/tms_client/logger.rb