我在播放框架2.2.4中使用了logback 1.7.5,在工作期间我遇到了这样的错误:
Exception in thread "Thread-5" java.lang.ExceptionInInitializerError
at controllers.db.SyncDBManager.createDeviceCollectionsIfNotExists(SyncDBManager.scala)
at server.impl.logic.controller.DeviceInitializer.checkAuthenticationResponse(DeviceInitializer.java:226)
at server.impl.logic.controller.DeviceInitializer.processReceivedFrames(DeviceInitializer.java:117)
at server.impl.logic.controller.DeviceController.onReceivedPackets(DeviceController.java:77)
at server.impl.logic.io.DeviceReader.run(DeviceReader.java:130)
Caused by: java.util.NoSuchElementException: None.get
at scala.None$.get(Option.scala:313)
at scala.None$.get(Option.scala:311)
at controllers.base.MongoSyncHelper$class.$init$(MongoSyncHelper.scala:16)
at controllers.db.SyncDBManager$.<init>(SyncDBManager.scala:32)
at controllers.db.SyncDBManager$.<clinit>(SyncDBManager.scala)
... 5 more
但只有在控制台上,如何捕获此异常并将其写入文件?
答案 0 :(得分:1)
看起来像是用sysout打印的控制台中的普通堆栈跟踪。根据您的设计,如果要使用Play记录器记录异常,则应通过将异常作为参数之一传递给具有记录器方法之一的catch块。例如:
try {
// code
} catch {
case e: Exception => play.api.Logger.error("An error occurred", e)
}
记录器级别取决于您。如果您没有catch块并且想要记录在应用程序的任何位置发生的意外异常,则应通过覆盖 onError 方法将其记录在Global对象中。
override def onError(request: RequestHeader, e: Throwable): Future[SimpleResult] = {
play.api.Logger.error("An error occurred", e)
super.onError(request, e)
}
请记住,仅在生产模式下调用 onError 方法。