2014-05-13 6 views
14

Ich betreibe einen Jboss-Server unter anderem mit einem JAX-RS-Webdienst (unter Verwendung des mit Jboss/EAP gebündelten resteasy-2.3.6.Finals).Abgebrochener Ajax-Aufruf gibt ClientAbortException/Broken pipe im Serverprotokoll: Wie fängt/unterdrückt man?

Wenn ein Client einen Aufruf an den Server abbricht, der Resteasy SynchronousDispatcher kann (natürlich) nicht die Antwort an den Client zurück, die eine Reihe von Fehlern auf der [SEVERE] und [ERROR] Ebene in meinen Server-Logs zu zeigen, verursacht.

Allerdings betrachte ich diese nicht als tatsächliche Fehler, also will ich sie nicht sehen. Zumal dies häufig geschehen wird, sobald der Dienst öffentlich genutzt wird.

Hier ist die Log-Ausgabe I zu unterdrücken will:

12:50:38,938 SEVERE [org.jboss.resteasy.core.SynchronousDispatcher] (http-localhost/127.0.0.1:8080-2) Failed executing GET /ajax/findPerson: org.jboss.resteasy.spi.WriterException: ClientAbortException: java.net.SocketException: Broken pipe 
    at org.jboss.resteasy.core.ServerResponse.writeTo(ServerResponse.java:262) [resteasy-jaxrs-2.3.6.Final-redhat-1.jar:2.3.6.Final-redhat-1] 
    .... 

Caused by: ClientAbortException: java.net.SocketException: Broken pipe 
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:403) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1] 
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:356) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1] 
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:426) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1] 
    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:415) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1] 
    ... 

Caused by: java.net.SocketException: Broken pipe 
    at java.net.SocketOutputStream.socketWrite0(Native Method) [rt.jar:1.7.0_51] 
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113) [rt.jar:1.7.0_51] 
    at java.net.SocketOutputStream.write(SocketOutputStream.java:159) [rt.jar:1.7.0_51] 
    at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:711) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1] 
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:450) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1] 
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:351) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1] 
    ... 

12:50:38,942 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/myapplication].[MyAjaxApplication]] (http-localhost/127.0.0.1:8080-2) JBWEB000236: Servlet.service() for servlet MyAjaxApplication threw exception: java.lang.IllegalStateException 
    at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:392) [jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1] 
    at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:152) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-1.jar:1.0.2.Final-redhat-1] 
    ... 

Gibt es eine elegante Art und Weise, das zu tun?

von writing my ownExceptionMapper gelang es mir, die erste (die [SEVERE]) und schalten Sie ihn in einem Debug-Level einzeilige Protokollausgabe zu verhindern, aber die zweite ist immer noch da. Ehrlich gesagt, ich habe keine Ahnung, wo ich überhaupt anfangen soll.

ich in einem anderen SO gesehen habe in Frage, dass I could just set the log level for one or both classes that throw the errors to a higher level, sagen [FATAL], aber ich würde dieses eher eine Problemumgehung betrachten ...

Ideen?

Antwort

0

In der standalone.xml Konfigurationsdatei JBoss, zum Logging-Subsystem (für <subsystem xmlns="urn:jboss:domain:logging:1.5"> durch die Suche zB wenn Sie EAP 6.4.0 verwenden) gehen und dann einen Logger für die Kategorie hinzufügen, für die Sie die zu unterdrücken wollen Fehler. Für Ihr Beispiel, wenn Sie die Protokolle für org.jboss.resteasy dann Logger würde so aussehen

<logger category="org.jboss.resteasy"> 
    <level name="OFF"/> 
</logger> 

Einstellen der Pegel auf OFF zu unterdrücken wollen, sollten Sie den Logger von Protokollierung der Fehler in dem Paket org.jboss.resteasy unterdrücken

+0

Aber dann würde ich keine RESETASY Protokollierung bekommen. Selbst auf der Ebene der problematischen Klasse ("SynchronousDispatcher") möchte ich lieber DIESE Ausnahme unterdrücken, nicht alle Log-Ausgaben von dieser Klasse. – Antares42

Verwandte Themen