Прерванный вызов Ajax дает ClientAbortException/Broken pipe в журнале сервера: как улавливать/подавлять?

Я запускаю сервер Jboss, среди прочего, веб-сервис JAX-RS (с использованием resteasy-2.3.6.Final, в комплекте с Jboss/EAP).

Когда клиент прерывает вызов на сервер, Resteasy SynchronousDispatcher может (явно) не отправлять ответ клиенту, который вызывает кучу ошибок на уровне [SEVERE] и [ERROR], чтобы отображаться в мои журналы сервера.

Однако я не рассматриваю их как реальные ошибки, поэтому я не хочу их видеть. В частности, поскольку это неизбежно произойдет, как только служба будет в общественном пользовании.

Вот вывод журнала, который я хочу подавить:

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]
    ...

Есть ли элегантный способ сделать это?

От писать собственные ExceptionMapper Мне удалось предотвратить первый ([SEVERE]) и превратить его в debug- однострочный логарифмический вывод, но второй все еще существует. Честно говоря, я понятия не имею, где даже начать искать.

Я видел в другом вопросе SO, что я мог бы просто установить уровень журнала для одного или обоих классов, которые выведут ошибки на более высокий уровень, скажем [FATAL], но я бы подумал об этом обходным путем...

Идеи?

Ответы

Ответ 1

В конфигурационном файле Jaboss standalone.xml перейдите в подсистему ведения журнала (например, путем поиска    <subsystem xmlns="urn:jboss:domain:logging:1.5">, если вы используете EAP 6.4.0), а затем добавьте регистратор для категории, для которой вы хотите подавить ошибки. Для вашего примера, если вы хотите подавить журналы для org.jboss.resteasy, ваш регистратор будет выглядеть как

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

Установка уровня на OFF должна подавлять регистратор при регистрации ошибок в пакете org.jboss.resteasy