Scala play catch / log java.lang.ExceptionInInitializerError

时间:2013-08-30 18:35:04

标签: scala exception-handling playframework

在Play中,如果正在初始化一个类 - 例如,configuration.get("badKey").get被调用,我相信有一个java.lang.ExceptionInInitializerError。但是,Play没有捕获或记录任何错误,它只是继续,坏了。

如何确保捕获或记录此内容,或者忽略其他内容?

它使网站停止,但我不知道它发生了。

我知道我不应该首先遇到这些错误。首先提示这一点的是Application.conf文件根据其本地环境或生产情况而有所不同。如果开发人员忘记将密钥添加到生产密钥,它可以使网站停止(静默)。但可以想象,也可能存在其他错误。

1 个答案:

答案 0 :(得分:0)

您可以使用Play内置的Logger。

import play.Logger

try {
  configuration.get("badKey").get
} catch {
  case e:ExceptionInInitializerError => {
    Logger.error("ExceptionInInitializerError")
    Logger.error(e.getMessage())
  }
  case e:Exception => {
    Logger.error("Exception")
    Logger.error(e.getMessage())
  }
}

或者编写一个访问默认设置的访问者或记录错误而无需尝试捕获

import play.Logger
import play.api.Play

object Conf {

  private val config = Play.current.configuration

  def get(key:String):String = 
    config.getString(key) match {
      case Some(value:String) => value
      case _                  => {
        Logger.warn("No value found in application.conf for [" + key + "]")
        "some default value"
      }
    }
}