Skip to content

Commit

Permalink
add logger adapter
Browse files Browse the repository at this point in the history
  • Loading branch information
technoweenie committed Feb 19, 2011
1 parent fa8c3f1 commit 1507503
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 2 deletions.
6 changes: 4 additions & 2 deletions lib/faraday/adapter.rb
Expand Up @@ -13,7 +13,8 @@ class Adapter < Middleware
:EMSynchrony => 'em_synchrony',
:Patron => 'patron',
:Excon => 'excon',
:Test => 'test'
:Test => 'test',
:Logger => 'logger'

register_lookup_modules \
:action_dispatch => :ActionDispatch,
Expand All @@ -22,7 +23,8 @@ class Adapter < Middleware
:typhoeus => :Typhoeus,
:patron => :Patron,
:em_synchrony => :EMSynchrony,
:excon => :Excon
:excon => :Excon,
:logger => :Logger

def call(env)
process_body_for_request(env)
Expand Down
30 changes: 30 additions & 0 deletions lib/faraday/adapter/logger.rb
@@ -0,0 +1,30 @@
module Faraday
class Adapter
class Logger < Faraday::Adapter
def initialize(app = nil, logger = nil)
super(app)
@logger = logger || begin
require 'logger'
Logger.new(STDOUT)
end
end

def call(env)
super
@logger.info "#{env[:method]} #{env[:url].to_s}"
@logger.debug("request") do
env[:request_headers].map { |(k, v)| "#{k}: #{v.inspect}" }.join("\n")
end

env[:response].on_complete do |resp_env|
@logger.info("Status") { env[:status].to_s }
@logger.debug("response") do
resp_env[:response_headers].map { |(k, v)| "#{k}: #{v.inspect}" }.join("\n")
end
end

@app.call(env)
end
end
end
end
37 changes: 37 additions & 0 deletions test/adapters/logger_test.rb
@@ -0,0 +1,37 @@
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'helper'))
require 'stringio'
require 'logger'

module Adapters
class LoggerTest < Faraday::TestCase
def setup
@io = StringIO.new
@logger = Logger.new(@io)
@logger.level = Logger::DEBUG

@conn = Faraday::Connection.new do |b|
b.adapter :logger, @logger
b.adapter :test do |stubs|
stubs.get('/hello') { [200, {'Content-Type' => 'text/html'}, 'hello'] }
end
end
@resp = @conn.get '/hello', :accept => 'text/html'
end

def test_still_returns_output
assert_equal 'hello', @resp.body
end

def test_logs_method_and_url
assert_match "get /hello", @io.string
end

def test_logs_request_headers
assert_match %(Accept: "text/html), @io.string
end

def test_logs_response_headers
assert_match %(Content-Type: "text/html), @io.string
end
end
end

0 comments on commit 1507503

Please sign in to comment.