如何在控制台上停止打印异常堆栈跟踪?

我编写了一个 servlet 来处理 Web 应用中发生的异常,并在 Web 中映射它们.xml

    <error-page>
      <exception-type>java.lang.Exception</exception-type>
      <location>/exceptionHandler</location>
    </error-page>

以下是我在异常处理 servlet 方法中所做的工作:service

@Override
    protected void service(HttpServletRequest req, HttpServletResponse arg1)
            throws ServletException, IOException {
         Object attribute = req.getAttribute("javax.servlet.error.exception");
         if(attribute instanceof  SocketException){
            // don't do anything 
         }else{
          super.service(req, arg1);
         }
    }.

问题:

上述方法不起作用,堆栈跟踪正在打印到控制台。当用户请求某些内容,然后关闭其浏览器时,会发生这种情况。

问题:

如何在发生堆栈跟踪时停止将堆栈跟踪打印到 JBoss 控制台?SocketException

这样做的原因:

我想避免在一天结束时看到所有日志,因为我无法对这些信息做任何事情。SocketException


答案 1

以下是我所做的,所以战争是解决的。

添加了一个过滤器并劫持所有请求和响应。捕获异常并检查类型。

/**
 * Hijacks all the http request and response here.
 * Catch the SocketException and do not print 
 * If other exceptions print to console
 * date : 9-18-2013
 * 
 * @author Suresh Atta
 *
 */
public class ExceptionHandler implements Filter {

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        try{
        arg2.doFilter(arg0, arg1);
        }catch(SocketException e ){
           // Please don't print this to log.    
        }
    }


}

和在,过滤器映射web.xml

<filter>
        <filter-name>ExceptionHandler</filter-name>
        <filter-class>com.nextenders.server.ExceptionHandler</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ExceptionHandler</filter-name>
        <dispatcher>  REQUEST   </dispatcher>
        <url-pattern> /*</url-pattern>
    </filter-mapping>  

我没有将此标记为答案,因为我不确定这是否是标准方式。只是一个解决方法。


答案 2

与其在 Web 中添加.xml为什么不尝试在 web 中添加套接字异常.xml本身如下所示java.lang.Exception

<error-page>
  <exception-type>java.net.SocketException</exception-type>
  <location>/exceptionHandler</location>
</error-page>

只是在你的servlet中什么都不做 或者添加一个空的jsp文件,比如

<error-page>
  <exception-type>java.net.SocketException</exception-type>
  <location>/error.jsp</location>
</error-page>

推荐