2010-04-12 3 views
2

Я получаю сообщение об ошибке, но не на локальном компьютере. Есть ли способ увидеть исключение, которое, вероятно, выбрасывается из производства? В tomcat - пользователь сможет видеть исключение, когда сервлет возвращает свой выводGAE, как увидеть производственные исключения?

ответ

6

Вы (администратор) можете увидеть исключение (включая полную трассировку стека) в средстве просмотра журнала на консоли администратора.

Если вы хотите отобразить исключение stacktrace для своих пользователей, вы можете установить фильтр сервлета, который ловит все и печатает stacktrace в потоке ответа (вы должны также зарегистрировать его как 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-схеме «*».

PS: Нет Tomcat, GAE/J работает Jetty.

+0

Извините за новичков q: - как я могу это сделать? как я понял, я могу отобразить фильтр на странице, но мне нужно, чтобы он отображался на все страницы. -Кажется, фильтр? – bach

+0

обновил мой ответ. вы можете иметь фильтр, сопоставленный всем страницам, используя шаблон «*» url. – Thilo

Смежные вопросы