Рассылка журналов исключений в веб-приложении Grails
Вопрос
Я бы хотел, чтобы мое веб-приложение 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);
}
Решение
Оказывается, на этот точный вопрос был ответ. в списке рассылки 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 и активации.jar в папку lib /.
Другие советы
Предполагая, что вы можете сделать это из groovy, вы захотите использовать каркас журналирования, такой как log4j для этого, у которого есть регистраторы, которые могут добавлять данные журнала в базу данных, отправить электронное письмо и т. Д.
Вы также можете взглянуть на механизм 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.b February.net/2008 /03/grails-custom-exception-handling.html р>