Estou usando o seguinte código para criar uma conexão:
<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
Então, estou realizando um post desta forma:
@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
O pedido funciona bem. O problema é que não estou vendo o corpo da requisição nos logs, apenas a url da requisição.
O madeireiro não faz corpos . Talvez isso possa ser um recurso opcional, mas por padrão eu não acho que deveria fazer corpos porque eles podem ser muito grandes e inflariam o log muito rapidamente.
Eu acho que existem vários casos de uso em que você deseja registrar todo o corpo. Eu preciso disso também. Sim, os corpos podem ser bem grandes, mas podemos usar o nível de log debug
e deixar que a instância do registrador passada controle a verbosidade.
@mtarnovan Concordo. Siga a solicitação pull referenciada para atualizações. Podemos adicionar o recurso, mas ele terá que ser opt-in e precisará ter algum tipo de proteção para evitar despejar corpos que não sejam de texto simples (como respostas compactadas ou binárias)
:+1: Chave para depuração
Desde que encontrei esta página através do Google: isso agora é suportado.
require "logger"
Faraday.new do |faraday|
faraday.response :logger, ::Logger.new(STDOUT), bodies: true
end
Há também configurações mais refinadas disponíveis, se você precisar delas. Veja a solicitação de pull.
Isso não parece funcionar para solicitações url_encoded
?
Oi @vemv , a ordem dos middlewares é extremamente importante no Faraday.
Você pode fornecer seu código de inicialização de conexão e tentar explicar melhor por que "não parece funcionar para solicitações url_encoded
"?
Qual é a saída que você obtém e qual é a esperada?
Eu sei que isso é antigo, mas não ocorreu a ninguém que o OP está registrando a resposta: faraday.response :logger
.
@jpickwell você usa faraday.response
porque o middleware logger
é registrado como um middleware de resposta. Na realidade, ele registra solicitações e respostas 😄
acabei de me deparar com isso; por esta linha , parece que você precisa passar dois argumentos para ver o corpo da solicitação:
Faraday.new do |faraday|
faraday.response :logger, ::Logger.new(STDOUT), body: true, bodies: { request: true, response: true }
end
(a menos que isso tenha mudado em um commit mais recente 🤔)
@davidalpert isso não é necessário, você pode simplesmente passar o bodies: true
para habilitar ambos, ou usar os valores separados como no exemplo acima para ter mais controle.
Vejo que há uma opção body: true
nesse exemplo, mas essa não é uma opção válida infelizmente (talvez eles tenham errado o plural?)
Comentários muito úteis
Desde que encontrei esta página através do Google: isso agora é suportado.
Há também configurações mais refinadas disponíveis, se você precisar delas. Veja a solicitação de pull.