Sha256: 6a926b10e5a05ae32c5df2f1aa9562f9132c5a93bd83945e68b0632acef6a296

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

require 'net/http'

# Usage:
#
#    require 'http_logger'
#
# == Setup logger
#
#    Net::HTTP.logger = Logger.new('/tmp/all.log')
#
# == Do request
#
#     res = Net::HTTP.start(url.host, url.port) { |http|
#       http.request(req)
#     }
#     ...

class Net::HTTP

  class << self
    attr_accessor :logger
    attr_accessor :colorize
  end

  self.colorize = true


  alias_method :request_without_logging,  :request

  def request(request, body = nil, &block)
    time = Time.now
    response = request_without_logging(request, body, &block)
    response
  ensure
    if self.started? && self.logger
      url = "http#{"s" if self.use_ssl?}://#{self.address}:#{self.port}#{request.path}"
      ofset = Time.now - time
      log("HTTP #{request.method} (%0.2fms)" % (ofset * 1000), url)
      log("POST params", request.body) if request.is_a?(::Net::HTTP::Post)
      if defined?(response) && response
        log("Response status", "#{response.class} (#{response.code})") 
        body = response.body
        log("Response body", body) unless body.is_a?(Net::ReadAdapter)
      end
    end
  end

  protected
  def log(message, dump)
    self.logger.debug(format_log_entry(message, dump))
  end

  def format_log_entry(message, dump = nil)
    if self.class.colorize
      message_color, dump_color = "4;32;1", "0;1"
      log_entry = "  \e[#{message_color}m#{message}\e[0m   "
      log_entry << "\e[#{dump_color}m%#{String === dump ? 's' : 'p'}\e[0m" % dump if dump
      log_entry
    else
      "%s  %s" % [message, dump]
    end
  end

  def logger
    self.class.logger
  end

end


if defined?(Rails)
  Net::HTTP.logger = Rails.logger
end


Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
http_logger-0.0.1 lib/http_logger.rb