我正在使用以下代码创建连接:
<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。
记录器不做 body 。 也许这可以是一个可选功能,但默认情况下我认为它不应该做身体,因为它们可能非常大并且会很快膨胀日志。
我认为有多个用例需要记录整个正文。 我也需要这个。 是的,body 可能非常大,但我们可以使用日志级别debug
并让传递的记录器实例控制详细程度。
@mtarnovan同意。 按照引用的拉取请求进行更新。 我们可能会添加该功能,但它必须是可选的,并且需要某种保护以避免转储非明文正文(例如压缩或二进制响应)
:+1: 调试键
因为我通过谷歌找到了这个页面:现在支持了。
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您使用faraday.response
因为logger
中间件已注册为响应中间件。 实际上,它同时记录请求和响应😄
刚遇到这个; 通过这一行,您似乎需要传递两个参数才能查看请求正文:
Faraday.new do |faraday|
faraday.response :logger, ::Logger.new(STDOUT), body: true, bodies: { request: true, response: true }
end
(除非在最近的提交中发生了变化🤔)
@davidalpert这不是必需的,您可以简单地传递bodies: true
来启用它们,或者使用上面示例中的单独值来获得更多控制。
我看到该示例中有一个body: true
选项,但不幸的是,这不是一个有效的选项(也许他们弄错了复数?)
最有用的评论
因为我通过谷歌找到了这个页面:现在支持了。
如果您需要,还可以使用更细粒度的设置。 请参阅拉取请求。