在我的播放应用程序中,我正在您通常在代码中进行日志记录(跟踪,调试,错误等)。
对于那些我无法捕获的错误,我可以在哪里放置日志记录,以便缓存我错过的错误?是否有一个可以捕捉所有错误的中心事件?
另外,每当我的应用程序中出现错误时,我应该如何显示友好的错误页面? (以及如何在开发中显示错误,以及生产环境中的自定义错误页面)
答案 0 :(得分:5)
https://www.playframework.com/documentation/2.3.x/ScalaGlobal#Providing-an-application-error-page
object Global extends GlobalSettings {
override def onError(request: RequestHeader, ex: Throwable) = {
if (! Play.isProd) super.onError(request, ex)
else
Future.successful(InternalServerError(
views.html.errorPage(ex)
))
}
}
答案 1 :(得分:2)
您可以通过扩展GlobalSettings
特征并覆盖onError
方法来实现此目的。
import play.api.GlobalSettings
import play.api._
import play.api.mvc._
import play.api.mvc.Results._
import scala.concurrent.Future
object Global extends GlobalSettings {
override def onError(request: RequestHeader, e: Throwable) = {
Logger.error(e.getMessage)
Future.successful(InternalServerError(views.html.defaultError()))
}
}
请注意,此Global
对象必须位于默认包中才能生效。只要onError
中存在未处理的异常,就会调用Action
。在那里,您可以访问原始Request
和抛出的异常。在这里,我只是记录异常消息并返回Result
并带有一些错误视图。