我希望我的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);
}
答案 0 :(得分:6)
几天前,这个确切的问题是answered on the Grails mailing list。
解决方案是将以下内容添加到Config.groovy的log4j部分:
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和activation.jar添加到lib / -folder。
答案 1 :(得分:0)
假设您可以从groovy执行此操作,您将需要使用诸如log4j之类的日志记录框架,该框架具有可以将日志数据附加到数据库{4}}等的记录器。
答案 2 :(得分:0)
您还可以查看Grails提供的 exceptionHandler 机制;我发现它非常简单;但足够强大,可以照顾我的所有习惯和清理异常处理需求。到目前为止还没有用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