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?
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