2010-04-12 46 views
2

我在生产环境中遇到错误,但没有在本地环境中出现错误。 有没有办法看到可能从生产中抛出的异常? 在tomcat中 - 当servlet返回输出时,用户将能够看到异常GAE如何查看生产异常?

回答

6

您(管理员)可以在管理控制台的日志查看器中看到异常(包括完整堆栈跟踪)。

如果要向用户显示异常堆栈跟踪,可以安装一个捕获所有内容并将堆栈跟踪打印到响应流的Servlet过滤器(然后,您还应该将其记录为SEVERE,以便仍然显示它在日志中)。

事情是这样的:

public class ExceptionLogger implements Filter { 

    @Override 
    public void init(FilterConfig config) throws ServletException { 
    } 

    @Override 
    public void destroy() { 
    } 

    @Override 
    public void doFilter(ServletRequest arg0, ServletResponse arg1, 
     FilterChain arg2) throws IOException, ServletException { 

     try{ 
      arg2.doFilter(arg0, arg1); 
     } catch (Exception e) { 
      Logger.getLogger("ExceptionLogger").log(Level.SEVERE, 
       "request failed with an exception", e); 
      e.printStacktrace(arg1.getWriter()); 
     } 
    } 
} 

,你可以设置它来过滤在web.xml中的所有页面以 “*” 一个url-pattern的。

PS:没有Tomcat,GAE/J正在运行Jetty。

+0

对不起,新手问: - 我会怎么做? 据我了解,我可以将一个过滤器映射到一个页面,但我需要它映射到所有页面 -过滤器看起来像什么? – bach 2010-04-12 23:34:38

+0

更新了我的答案。你可以使用“*”url-pattern将一个过滤器映射到所有页面。 – Thilo 2010-04-13 05:18:34