【问题标题】:Log any Tomcat-level exceptions that are handled by error-page in web.xml记录由 web.xml 中的错误页面处理的任何 Tomcat 级异常
【发布时间】:2014-01-06 21:44:34
【问题描述】:

我的 web.xml 中有以下行,它们用自定义的用户友好错误页面替换堆栈跟踪呈现。

<error-page>
  <location>/error.html</location>
</error-page>

我想知道的是,是否可以让 Tomcat 将 error-page 元素处理的任何异常记录到日志文件中。如果我使用访问日志,我会看到 500,但我无法看到堆栈跟踪。如何将堆栈跟踪记录到日志中?

【问题讨论】:

    标签: tomcat logging


    【解决方案1】:

    您可以创建一个专门的 servlet 来处理错误。

    <servlet>
            <servlet-name>ErrorHandler</servlet-name>
            <servlet-class>ErrorHandler</servlet-class>
    </servlet>
    
    <servlet-mapping>
            <servlet-name>ErrorHandler</servlet-name>
            <url-pattern>/ErrorHandler</url-pattern>
    </servlet-mapping>
    

    然后在&lt;error-page&gt;&lt;location&gt;中引用这个:

    <error-page>
      <location>/ErrorHandler</location>
    </error-page>
    

    然后实现ErrorHandler servlet,以便在转发到现有的用户友好错误页面之前记录原始异常。例如:

    public class ErrorHandler extends HttpServlet {
    
        private static final Log LOG = LogFactory.getLog(ErrorHandler.class);
    
        public void doGet(HttpServletRequest req, HttpServletResponse resp) {
    
            // Obtain the original exception
            final Throwable throwable = (Throwable) req.getAttribute("javax.servlet.error.exception");
    
            // Log the exception
            log.error("Caught unhandled exception: " + e, e);
    
            // Forward to the friendly error page
            RequestDispatcher rd = req.getRequestDispatcher("error.html");
            rd.forward(request, response);
    
            ...
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-19
      • 1970-01-01
      • 2016-12-31
      • 2013-08-15
      • 2019-10-08
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多