次のコードを使用して接続を作成しています。
<strong i="6">@connection</strong> = Faraday.new(HOST, ssl: { verify: true }) do |faraday|
faraday.request :url_encoded
faraday.response :logger
faraday.adapter Faraday.default_adapter
end
次に、次のように投稿を実行します。
@connection.post do |request|
request.url "#{my_uri.path}?#{my_uri.query}"
request.headers['Content-Type'] = 'application/json'
request.body = my_object.to_json
end
リクエストは正常に機能します。 問題は、ログにリクエストの本文が表示されず、リクエストのURLのみが表示されることです。
ロガーはボディを行いません。 これはオプションの機能かもしれませんが、デフォルトでは、ボディがかなり大きくなる可能性があり、ログが非常に速く膨らむため、ボディを実行するべきではないと思います。
全身を記録したいユースケースは複数あると思います。 私もこれが必要です。 はい、本文はかなり大きくなる可能性がありますが、ログレベルdebug
を使用して、渡されたロガーインスタンスに冗長性を制御させることができます。
@mtarnovan同意しました。 参照されているプルリクエストに従って更新してください。 この機能を追加することもできますが、オプトインする必要があり、プレーンテキスト以外の本文(圧縮またはバイナリ応答など)のダンプを回避するための何らかのガードが必要になります。
:+1:デバッグ用のキー
このページをGoogleで見つけたので、これがサポートされるようになりました。
require "logger"
Faraday.new do |faraday|
faraday.response :logger, ::Logger.new(STDOUT), bodies: true
end
必要に応じて、よりきめ細かい設定も利用できます。 プルリクエストを参照してください。
これはurl_encoded
リクエストでは機能しないようですか?
こんにちは@vemv 、ミドルウェアの順序はファラデーで非常に重要です。
接続初期化コードを提供して、「 url_encoded
リクエストで機能しないように見える」理由を詳しく説明してください。
あなたが得る出力は何ですか、そして期待されるものは何ですか?
私はこれが古いことを知っていますが、OPが応答をログに記録していることは誰にも起こりませんでした: faraday.response :logger
。
@jpickwell logger
ミドルウェアは応答ミドルウェアとして登録されているため、 faraday.response
を使用します。 実際には、リクエストとレスポンスの両方をログに記録します😄
ちょうどこれに出くわしました。 この行では、リクエストの本文を表示するために2つの引数を渡す必要があるようです。
Faraday.new do |faraday|
faraday.response :logger, ::Logger.new(STDOUT), body: true, bodies: { request: true, response: true }
end
(最近のコミットで変更されていない限り🤔)
@davidalpertは必要ありません。単に、 bodies: true
を渡して両方を有効にするか、上記の例のように個別の値を使用して、より詳細に制御することができます。
その例にはbody: true
オプションがあるようですが、残念ながらそれは有効なオプションではありません(複数形が間違っている可能性がありますか?)
最も参考になるコメント
このページをGoogleで見つけたので、これがサポートされるようになりました。
必要に応じて、よりきめ細かい設定も利用できます。 プルリクエストを参照してください。