2014-08-27 61 views
0

我使用的logback 1.7.5具有播放框架2.2.4,文件工作我得到这样的错误时:的logback没有的ExceptionInInitializerError仅在控制台上

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 

但只有在控制台上,怎么可以捕获这样的异常并将其写入文件?

回答

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方法被称为只有在生产模式。