我怎样才能避免记录球衣WebApplicationException?

时间:2013-11-20 06:06:42

标签: java jersey

使用jersey,我抛出一个带有503的WebApplicationException,表明我的服务不可用(因为某些下游服务不可用)。

当发生这种情况时,我会得到如下所示的日志记录,并有大量的堆栈跟踪。

[exec] SEVERE: Mapped exception to response: 503 (Service Unavailable)
[exec] javax.ws.rs.WebApplicationException
...

我真的不想要这种日志记录,因为它实际上由于记录太多而最终会占用服务器的线程。例如,我发现许多线程卡在下面。有没有办法告诉球衣不记录任何东西,或者至少不记录堆栈跟踪?请注意,我确实希望将此日志记录用于其他错误代码,例如500.只是不是503。

at java.util.logging.StreamHandler.publish(StreamHandler.java:174)
- waiting to lock <0x00000000c30ef5e0> (a java.util.logging.ConsoleHandler)
at java.util.logging.ConsoleHandler.publish(ConsoleHandler.java:88)
at java.util.logging.Logger.log(Logger.java:478)
at java.util.logging.Logger.doLog(Logger.java:500)
at java.util.logging.Logger.log(Logger.java:589)
at com.sun.jersey.spi.container.ContainerResponse.logException(ContainerResponse.java:509)
at com.sun.jersey.spi.container.ContainerResponse.onException(ContainerResponse.java:487)
at com.sun.jersey.spi.container.ContainerResponse.mapWebApplicationException(ContainerResponse.java:421)
at com.sun.jersey.spi.container.ContainerResponse.mapMappableContainerException(ContainerResponse.java:399)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1418)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1363)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1353)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:414)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)

1 个答案:

答案 0 :(得分:1)

对我来说有用的是简单地关闭该课程的所有日志记录。 SLF4J提供“关闭”级别,可以抑制所有日志记录。

在我的Dropwizard配置中:

loggers:
  "com.sun.jersey.spi.container.ContainerResponse": OFF

也许不是最优雅的解决方案,但我无法处理污染我的日志的堆栈痕迹。