2014-05-13 17 views
14

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?

risposta

0

Nel file di configurazione standalone.xml JBoss, andare al sottosistema di registrazione (ad esempio la ricerca di <subsystem xmlns="urn:jboss:domain:logging:1.5"> se si utilizza EAP 6.4.0), e quindi aggiungere un logger per la categoria per la quale si desidera eliminare la errori. Per il vostro esempio, se si desidera eliminare i log per org.jboss.resteasy allora il vostro registratore assomiglierebbe

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

L'impostazione del livello OFF dovrebbe sopprimere il registratore dalla registrazione gli errori nel pacchetto di org.jboss.resteasy

+0

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