отправить электронное письмо об исключении или ошибке - PullRequest
3 голосов
/ 21 декабря 2009

Я хотел бы получить электронное письмо, когда в моем веб-приложении произошла ошибка или исключение, чтобы я мог быстро исправить. Мне нравится показывать страницу с ошибкой клиенту и в то же время получать электронную почту. Я использую jsp и соответствующий сервлет и контроллер для каждого jsp.

Как я могу вызвать сервлет для отправки электронной почты, когда возникает ошибка или исключение? Как конфигурация в web.xml?

Пожалуйста, помогите.

Ответы [ 8 ]

5 голосов
/ 21 декабря 2009

Это зависит не только от того, какие API и / или платформы вы уже используете (например, log4j), но также от того, как вы обрабатываете глобальные исключения. Если вы только что определили error-page в web.xml, то, например, вышеупомянутый log4j наверняка не увидит / не обработает его. Вам нужно поймать и записать это себя .

Вы можете использовать Filter прослушивание на url-pattern из /* для этого:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    try {
        chain.doFilter(request, response);
    } catch (Exception e) {
        logger.error(e); // Let "error" level associate with SMTPAppender.
        throw new ServletException(e); // Will be handled by error-page.
    }
}

Или в сервлете контроллера, если он у вас есть:

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    View view = new View(request, response);
    Action action = ActionFactory.getAction(request);
    try {
        action.execute(view);
    } catch (Exception e) {
        logger.error(e); // Let "error" level associate with SMTPAppender.
        throw new ServletException(e); // Will be handled by error-page.
    }
    view.navigate();
}

В качестве короткой, но семантически неприятной альтернативы вы также можете использовать скриптлетов в JSP. exception доступен как неявная переменная в JSP. Зарегистрируйте это на странице ошибок и позвольте регистратору обрабатывать почтовые сообщения. Э.Г.

<% logger.error(exception); %>
5 голосов
/ 21 декабря 2009

Вы можете написать собственное решение или использовать параметры электронной почты в стандартных пакетах регистрации. Например, в log4j есть SMTPAppender, который будет делать то, что вам нужно.

0 голосов
/ 21 декабря 2009

Вы используете Spring? Если да, то вы можете использовать Exception Resolver для перенаправления на определенный контроллер при возникновении ошибки. В случае ошибок JSP вы можете настроить страницу ошибок на отправку писем.

0 голосов
/ 21 декабря 2009

Вы должны тщательно изучить, как настроить страницу ошибки в Servlet API.

На этой странице ошибок вы можете делать все, что захотите, с исключением запуска.

См. Руководство по Java EE по обработке ошибок на страницах JSP по адресу http://java.sun.com/javaee/5/docs/tutorial/doc/bnahe.html#bnahi

РЕДАКТИРОВАТЬ: см. Также документацию о том, как сделать это только с Tomcat на http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html. Поиск JavaMail.

0 голосов
/ 21 декабря 2009

Решение log4j особенно хорошо, потому что вы можете настроить его так, чтобы оно также отправляло предыдущие строки журнала, чтобы у вас было больше контекста о том, как произошло исключение

0 голосов
/ 21 декабря 2009

Я рекомендую вам использовать существующее решение для мониторинга, такое как log4j (@Ben), nagios или один из коммерческих продуктов с открытым исходным кодом.

Если вы решаете проблему самостоятельно, следите за такими проблемами, как:

  • множество ложных тревог, отправляющих вам мониторинг СПАМа

  • мониторинг СПАМА, вызывающего пропуск реальных аварийных сигналов

  • потеря сигналов из-за перебоев в работе электронной почты

  • никаких аварийных сигналов, потому что ваша система стала кататонической, а не выдает исключение

0 голосов
/ 21 декабря 2009

Возможно, я ошибаюсь, но из вашего вопроса кажется, что вы ожидаете, что это вопрос конфигурации или добавления нескольких параметров к web.xml. Это на самом деле несколько сложнее, поскольку Java EE более «низкоуровневый», чем этот.

Вам нужно написать код, который отправляет электронное письмо, используя JavaMail API . ( Здесь - исходный пример.) Этот код должен идти в вашем обработчике исключений / ошибок.

Это хорошая идея, чтобы сделать эту функцию настраиваемой, чтобы вы могли включить или выключить ее в разных частях вашего приложения.

Также хорошей идеей является очень тщательно продумать, что происходит, если отправка почты не удалась по любой причине.

И, конечно, вам понадобится существующий почтовый сервер с существующей почтовой учетной записью.

0 голосов
/ 21 декабря 2009

Вы можете использовать Java Mail API , javadoc здесь и здесь - руководство для разработчиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...