将错误页面处理的任何Tomcat级别异常记录在web.xml中

将错误页面处理的任何Tomcat级别异常记录在web.xml中,tomcat,logging,Tomcat,Logging,我的web.xml中有以下几行代码,它们将堆栈跟踪呈现替换为自定义的用户友好错误页面 <error-page> <location>/error.html</location> </error-page> /error.html 我想知道的是,是否有可能让Tomcat将错误页面元素处理的任何异常记录到日志文件中。如果我使用访问日志,我会看到500,但我无法看到堆栈跟踪。如何将堆栈跟踪记录到日志中?您可以创建一个专用servlet来处理错误

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

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

/error.html

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

您可以创建一个专用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>
<error-page>
  <location>/ErrorHandler</location>
</error-page>
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);

        ...

    }
}