0

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

我怎样才能确保它被捕获、记录或被忽略?

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

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

4

1 回答 1

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"
      }
    }
}
于 2013-08-31T00:44:25.647 回答