Рассылка журналов исключений в веб-приложении Grails - PullRequest
4 голосов
/ 11 марта 2009

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

В основном я ищу элегантный способ достичь чего-то, эквивалентного:

  try {
      // ... all logic/db-access/etc required to render the page is executed here ...
  }
  catch (Exception e) {
      sendmail("exception@example.com", "An exception was thrown while processing a http-request", e.toString);
  }

Ответы [ 3 ]

6 голосов
/ 11 марта 2009

Оказывается, на этот точный вопрос ответили в списке рассылки Grails пару дней назад.

Решение состоит в том, чтобы добавить следующее в log4j-раздел Config.groovy:

log4j {
    ...
    appender.mail='org.apache.log4j.net.SMTPAppender'
    appender.'mail.To'='email@example.com'
    appender.'mail.From'='email@example.com'
    appender.'mail.SMTPHost'='localhost'
    appender.'mail.BufferSize'=4096
    appender.'mail.Subject'='App Error'
    appender.'mail.layout'='org.apache.log4j.PatternLayout'
    appender.'mail.layout.ConversionPattern'='[%r] %c{2} %m%n'
    rootLogger="error,stdout,mail"
    ...
    // rootLogger="error,stdout" (old rootLogger)
}

Плюс добавление sun-javamail.jar и activ.jar в папку lib /.

0 голосов
/ 12 марта 2009

Также можно взглянуть на механизм exceptionHandler , предоставленный Grails; Я нахожу это очень простым; все же достаточно мощный, чтобы позаботиться обо всех моих пользовательских и чистых потребностях обработки исключений. До сих пор не проверял этот подход с 1.1; но очень хорошо работает с 1.0.3.

class BootStrap {

   def exceptionHandler

   def init = { servletContext ->
      exceptionHandler.exceptionMappings =
        [ 'NoSuchFlowExecutionException' :'/myControler/myAction',
        'java.lang.Exception' : '/myController/generalAction']
   }

  def destroy = { }
}

Подробный блог здесь:

http://blog.bruary.net/2008/03/grails-custom-exception-handling.html

0 голосов
/ 11 марта 2009

Предполагая, что вы можете сделать это из groovy, вы захотите использовать для этого структуру ведения журналов, такую ​​как log4j , которая имеет регистраторы, которые могут добавлять данные журнала в базу данных, отправлять электронную почту и др.

...