Faraday: Faraday protokolliert den Text der POST-Anfrage nicht

Erstellt am 9. Apr. 2013  ·  11Kommentare  ·  Quelle: lostisland/faraday

Ich verwende den folgenden Code, um eine Verbindung herzustellen:

<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

Dann führe ich einen Beitrag auf diese Weise aus:

@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

Die Anfrage funktioniert einwandfrei. Das Problem ist, dass ich in den Protokollen nicht den Anfragetext sehe, sondern nur die Anfrage-URL.

Hilfreichster Kommentar

Da ich diese Seite über Google gefunden habe: diese wird nun unterstützt.

require "logger"

Faraday.new do |faraday|
  faraday.response :logger, ::Logger.new(STDOUT), bodies: true
end

Bei Bedarf stehen auch feinere Einstellungen zur Verfügung. Siehe Pull-Request.

Alle 11 Kommentare

Der Logger macht keine Körper . Vielleicht kann dies eine optionale Funktion sein, aber standardmäßig denke ich, dass es niemals Körper tun sollte, da sie ziemlich groß sein können und das Protokoll sehr schnell aufblasen würden.

Ich denke, es gibt mehrere Anwendungsfälle, in denen Sie den gesamten Körper protokollieren möchten. Das brauche ich auch. Ja, Körper können ziemlich groß sein, aber wir können die Protokollebene debug und die übergebene Logger-Instanz die Ausführlichkeit steuern lassen.

@mtarnovan Einverstanden. Folgen Sie der referenzierten Pull-Anfrage für Updates. Wir können die Funktion hinzufügen, aber sie muss aktiviert sein und eine Art Schutz haben, um zu vermeiden, dass Nicht-Klartext-Textkörper (wie komprimierte oder binäre Antworten) ausgegeben werden.

:+1: Schlüssel zum Debuggen

Da ich diese Seite über Google gefunden habe: diese wird nun unterstützt.

require "logger"

Faraday.new do |faraday|
  faraday.response :logger, ::Logger.new(STDOUT), bodies: true
end

Bei Bedarf stehen auch feinere Einstellungen zur Verfügung. Siehe Pull-Request.

Dies scheint bei url_encoded Anfragen nicht zu funktionieren?

Hallo @vemv , die Reihenfolge der Middleware ist in Faraday extrem wichtig.
Können Sie bitte Ihren Verbindungsinitialisierungscode bereitstellen und versuchen, besser zu erklären, warum er "nicht für url_encoded Anfragen zu funktionieren scheint"?
Was ist die Ausgabe, die Sie erhalten und was ist die erwartete?

Ich weiß, dass dies alt ist, aber ist niemandem aufgefallen, dass das OP die Antwort protokolliert: faraday.response :logger .

@jpickwell Sie verwenden faraday.response weil die logger Middleware als Antwort-Middleware registriert ist. In Wirklichkeit protokolliert es sowohl Anfragen als auch Antworten 😄

bin gerade darauf gestoßen; In dieser Zeile müssen Sie anscheinend zwei Argumente übergeben, um den Anforderungstext anzuzeigen:

Faraday.new do |faraday|
  faraday.response :logger, ::Logger.new(STDOUT), body: true, bodies: { request: true, response: true }
end

(es sei denn, das hat sich in einem neueren Commit geändert 🤔 )

@davidalpert das ist nicht notwendig, Sie können einfach bodies: true , um beide zu aktivieren, oder die separaten Werte wie im obigen Beispiel verwenden, um mehr Kontrolle zu haben.
Ich sehe, dass es in diesem Beispiel eine Option body: true , aber das ist leider keine gültige Option (vielleicht haben sie den Plural falsch verstanden?)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen