2016-03-22 7 views
1

Mein Arbeitgeber verwendet Playframework 2.4, das Netty als seinen HTTP-Handler verwendet.Wie schreiben Sie Zugangslogger für Netty in Playframework 2.4?

In der Anwendung, an der ich arbeite, weist der Server einige Client-POSTs (kein Anforderungshauptteil) mit einem HTTP 400-Fehler zurück.

Wenn ich die gleiche URL von meinem REST-Client POST, ist es erfolgreich. Es wird auf die Anwendungssteuerungsart verwiesen, die dieser Route zugeordnet ist.

Daher denke ich, Netty lehnt den Client POST ab. Ich möchte wissen, warum Netty die Bitte nicht mag.

Mit einem netty access.log wäre sehr hilfreich für diese Situation (und zukünftige ungerade Situationen).

Gibt es eine einfache Möglichkeit, der Netty-Pipeline in Playframework 2.4 eine Java-Zugriffsprotokollierungsklasse hinzuzufügen?

Wenn ja, wie würde die Java-Klasse aussehen und wo würde ich sie hinstellen, also würde Netty sie benutzen?

+0

ich in der Lage war Playframework und Netty zur Ausgabe eines Grund accesslog zu konfigurieren. Es benötigt eine Systemeigenschaft 'http.netty.log.wire = true' und logback.xml config, wie hier beschrieben: https://www.playframework.com/documentation/2.3.x/SettingsLogger. Dieses Protokoll sagt mir aber immer noch nicht genau, warum Netty entschieden hat, dass eine POST-Anfrage eine 400 war. – devdanke

Antwort

0

Netty lehnt die POST-Anfragen nicht ab, Netty lehnt nichts ab, es ist ein sehr niedriges Framework, selbst wenn es Probleme beim Parsing der Anfrage hat, gibt es es trotzdem an Play in einem fehlerhaften Zustand weiter. Wenn etwas die POST-Anfragen ablehnt, ist es Play.

Sie können einen einfachen Filter im Play implementieren Anforderungen zu protokollieren, wie hier gezeigt:

https://www.playframework.com/documentation/2.4.x/ScalaHttpFilters

+0

Sorry, Scala ist keine Option für dieses Projekt. Aber zum Glück habe ich versucht, diesem Beispiel zu folgen. Leider habe ich keine Dokumentation gefunden, wie Java- und Scala-Code-Dateien für diese Art von Dingen zusammengemischt werden können. Ich habe die Frage bearbeitet, um klarzustellen, dass ich nach einer Java-Lösung suche. Außerdem habe ich trotz der Aktivierung aller Logger nie einen Hinweis darauf erhalten, dass eine Playframework-Klasse die Anfrage erhalten hat. Ich vermute, dass etwas wie Nettys HttpRequestDecoder verwendet wird. Und dass es den schlechten POST ablehnt. – devdanke

+1

Sie können das Wort "Scala" in der URL durch das Wort "Java" ersetzen: https://www.playframework.com/documentation/2.4.x/JavaHttpFilters – cagenut

+0

@cagenut: Ein paar Dinge: 1) Ihre Referenz zeigt, wie Sie vorhandene Filter konfigurieren und nicht, wie Sie einen Java-Filter schreiben. 2) AFAIK, diese Filter sind wie Servlet-Filter, d. H. Sie werden nach und außerhalb des Netty-HTTP-Servers aufgerufen. In meinem Fall wird die Client-Anfrage nicht von Play abgelehnt, sondern von Netty, die in Play eingebettet ist. AFAIK, der Fehler passiert in Netty und macht es nie zu Play-Code. 3) Ich habe bereits versucht, einen Java Filter basierend darauf zu erstellen. Es hat nicht funktioniert. Ich habe meine Frage gestellt, um konkrete Hilfe zu bekommen, um das Problem zu lösen. Ich habe die Dokumente bereits gründlich gescannt. – devdanke