Wie bekomme ich Jersey 2.2 (JAX-RS), um Protokollausgaben zu generieren, einschließlich Json-Anfragetexten?

Ich verwende ein Jersey 2.2-Servlet in Jetty 9.0.4, um REST-Anforderungen zu erfüllen.

Meistens ist alles gut und Anfragen werden bedient, aber ich habe noch nie gesehenIRGENDEIN Baumstamm aus Jersey Klassen. Und ich kann keine Dokumentation finden, die angibt, welche Hühner ich opfern muss, um dies mit Jersey 2.2 zu erreichen

Meine erste Frage lautet also: Was muss ich tun, damit Jersey ein Protokoll erstellt?

Wenn eine Anfrage schief läuft (z. B. weil der Json-Anfragetext nicht analysiert werden kann), löst Jersey eine ContainerException mit der Meldung "Instanz von java.util.ArrayList out of START_OBJECT token kann nicht deserialisiert werden" usw. aus SeinJa wirklich Schön, den eingehenden Anfragetext protokolliert zu haben, damit ich den Json inspizieren kann. Wieder kann ich in der aktuellen Dokumentation nichts finden, was ein solches Biest beschreibt, obwohl ich mir sicher bin, dass es eines gibt. Und bis ich Frage 1 oben löse, geht es auf jeden Fall nicht.

Meine zweite Frage ist also, wie ich den eingehenden Anforderungshauptteil protokolliere (ohne die Anforderung zu stören).

Die Jersey Servlet Konfiguration in web.xml sieht so aus:

<servlet >
    <servlet-name>Jersey Servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>au.com.xandar.wirelesstiming.recorder.web.rest.JerseyApplication</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

Meine JerseyApplication ist:

public final class JerseyApplication extends ResourceConfig {

    public JerseyApplication() {
        super(
            //JacksonFeature.class   // Switching on Jackson
            // (My) JerseyLoggingFilter.class       // Log requests using Jersey ContainerRequestFilter 
            MyApplicationEventListener.class        // Log Requests using Jersey RequestEventListener
        );
        packages("au.com.xandar.wirelesstiming.recorder");

        // Enable LoggingFilter & output entity.
        // NB This does NOT generate any log.
        registerInstances(new LoggingFilter(Logger.getLogger(JerseyApplication.class.getName()), true));
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage