Sono in esecuzione un server Jboss con, tra le altre cose, un servizio Web JAX-RS (utilizzando il resteasy-2.3.6.Final in bundle con Jboss/EAP).La chiamata Ajax abortita dà ClientAbortException/Broken pipe nel log del server: Come catturare/sopprimere?
Quando un client interrompe una chiamata al server, la Resteasy SynchronousDispatcher
può (ovviamente) non inviare la risposta al client che provoca una serie di errori a livello [SEVERE]
e [ERROR]
di presentarsi nei miei log del server.
Tuttavia, non li considero come errori effettivi, quindi non voglio vederli. Soprattutto perché questo si verifica spesso quando il servizio sarà di pubblico uso.
Ecco l'output del registro voglio sopprimere:
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]
...
C'è un modo elegante per farlo?
Con writing my ownExceptionMapper
sono riuscito a evitare che il primo (la [SEVERE]
) e trasformarlo in un livello di debug una linea di uscita del registro, ma il secondo è ancora lì. Francamente, non ho idea di dove iniziare a guardare.
che ho visto in un altro SO domanda che I could just set the log level for one or both classes that throw the errors to a higher level, dicono [FATAL]
, ma mi piacerebbe prendere in considerazione questo più di una soluzione alternativa ...
idee?
Ma poi non vorrei ottenere alcun registro restia. Anche a livello della classe incriminata ("SynchronousDispatcher"), preferirei che questa eccezione SOPRA fosse soppressa, non tutto l'output di registro da quella classe. – Antares42