2014-09-16 4 views
4

최근에 내 http 클라이언트를 패러디로 전환했는데 모든 것이 의도 한대로 작동합니다. 다음 코드로 연결을 만듭니다 :패러데이의 로그 레벨을 설정하는 방법

@connection = Faraday.new(:url => base_url) do |faraday| 
       faraday.use Custim::Middleware 
       faraday.request :url_encoded    # form-encode POST params 
       faraday.request :json 
       faraday.response :json, :content_type => /\bjson$/ 
       faraday.response :logger 
       faraday.adapter Faraday.default_adapter # make requests with Net::HTTP 

패러데이 로거는 콘솔 출력의 모든 로그를 인쇄하는 데 도움이됩니다. 그러나 콘솔 출력에 모든 로그 수준을 인쇄하고 싶지는 않습니다. 오류 로그를 출력하기 위해 로그 수준을 어떻게 설정합니까? .

내가 패러데이 버전을 사용하고 0.8.9

+0

나는 어떤 유용한 정보가 패러데이에 의해 시스템 로그에 출력되는 것을 찾지 못했습니다. "Faraday Detailed Logger"보석이 도움이된다는 것을 알았습니다. https://github.com/envylabs/faraday-detailed_logger – JosephK

답변

2

나는 패러데이에서이 작업을 수행 할 수있는 기본 방법이 생각하지 않습니다,하지만 미들웨어에서 쉽게 구현할 수있을 것 :

require 'faraday' 

class LogOnError < Faraday::Response::Middleware 
    extend Forwardable 
    def_delegators :@logger, :debug, :info, :warn, :error, :fatal 

    ClientErrorStatuses = 400...600 

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

    def call(env) 
    @app.call(env).on_complete do 
     case env[:status] 
     when ClientErrorStatuses 
     info "#{env.method} #{env.url.to_s} #{response_values(env)}" 
     end 
    end 
    end 


    def response_values(env) 
    {:status => env.status, :headers => env.response_headers, :body => env.body} 
    end 
end 

conn = Faraday.new('https://github.com/') do |c| 
    c.use LogOnError 
    c.use Faraday::Adapter::NetHttp 
end 

puts "No text to stdout" 
response = conn.get '/' #=> No text to stdout] 
puts "No text above..." 
puts "Text to stdout:" 
response = conn.get '/cant-find-me' #=> Text to standoupt 

어떤 생산 : 당신은 당신이 include 조금 그것을 청소하는 그것의 자신의 클래스에이를 분할 할 수 있습니다

No text to stdout 
No text above... 
Text to stdout: 
I, [2014-09-17T14:03:36.383722 #18881] INFO -- : get https://github.com/cant-find-me {:status=>404, :headers=>{"server"=>"GitHub.com", "date"=>"Wed, 17 Sep 2014 13:03:36 GMT", "content-type"=>"application/json; charset=utf-8", "transfer-encoding"=>"chunked", "connection"=>"close", "status"=>"404 Not Found", "x-xss-protection"=>"1; mode=block", "x-frame-options"=>"deny", "content-security-policy"=>"default-src *; script-src assets-cdn.github.com www.google-analytics.com collector-cdn.github.com; object-src assets-cdn.github.com; style-src 'self' 'unsafe-inline' 'unsafe-eval' assets-cdn.github.com; img-src 'self' data: assets-cdn.github.com identicons.github.com www.google-analytics.com collector.githubapp.com *.githubusercontent.com *.gravatar.com *.wp.com; media-src 'none'; frame-src 'self' render.githubusercontent.com gist.github.com www.youtube.com player.vimeo.com checkout.paypal.com; font-src assets-cdn.github.com; connect-src 'self' ghconduit.com:25035 live.github.com uploads.github.com s3.amazonaws.com", "vary"=>"X-PJAX", "cache-control"=>"no-cache", "x-ua-compatible"=>"IE=Edge,chrome=1", "set-cookie"=>"logged_in=no; domain=.github.com; path=/; expires=Sun, 17-Sep-2034 13:03:36 GMT; secure; HttpOnly", "x-runtime"=>"0.004330", "x-github-request-id"=>"2EED8226:76F6:1951EDA:541986A8", "strict-transport-security"=>"max-age=31536000; includeSubdomains; preload", "x-content-type-options"=>"nosniff"}, :body=>"{\"error\":\"Not Found\"}"} 

.

9

방법이 있지만 문서화되지 않은 것 같습니다. 나는 0.9.1에서 이것을 시도했지만 0.8.9에서도 작동 할 것이다. faraday.response :logger 아마이 생성자가 Faraday::Response::Logger를 사용하여 미들웨어, 만들기 때문에

# provide your own logger 
logger = Logger.new $stderr 
logger.level = Logger::ERROR 
Faraday.new(:url => base_url) do |faraday| 
    # ... 
    faraday.response :logger, logger 
    # ... 
end 

이 작동 :

def initialize(app, logger = nil) 

보너스

0.9.1에서를 생성자의 서명은

def initialize(app, logger = nil, options = {}) 
입니다

또한이 클래스에는 DEFAULT_OPTIONS = { :bodies => false }이 포함되어 있습니다. 이는 신체 로깅을 제어하기 위해 로거 뒤에 :bodies 옵션을 전달할 수 있음을 의미합니다. 분명히 {bodies: {response: true}}을 사용하여 응답 본문을 기록 할 수 있지만 요청 본문은 기록 할 수 없습니다.

0

logger.debug 메서드를 재정의하면 나에게 트릭을 보냈습니다. 이제 나는 INFO 이상의 메시지 만받습니다. 나는 패러데이 0.12.1을 사용하고있다.

faraday = Faraday.new(:url => "http://example.org") do |faraday| 
    faraday.response :logger do | logger | 
    def logger.debug *args; end 
    end 
end 

이 조금 더러운하지만 훨씬 적은 코드)