2014-01-17 94 views
2

我正试图在Scala Play!2应用程序中记录所有请求的时间。我想我需要覆盖onRequestReceived以返回一个调用动作的新的Handler,然后记录时间,然后返回动作的结果。但我不知道如何调用处理程序。Play!2 Scala应用程序的日志记录请求时间

这是我有:

override def onRequestReceived(requestHeader: RequestHeader) = { 
    val startTime = System.currentTimeMillis 

    val (rh, handler) = super.onRequestReceived(requestHeader) 

    def newHandler = Action { 
    val result = handler.apply // No such method 

    val requestTime = System.currentTimeMillis - startTime 
    Logger.debug("time: " + requestTime) 

    result 
    } 

    (rh, newHandler) 
}  

但handler.apply不存在。我如何调用super.onRequestReceived返回的处理程序。而且,更重要的是,我是否以正确的方式来解决这个问题?

+0

看看[this](https://github.com/kenshoo/metrics-play)。 – Peter

+0

我看到了,但'过滤器'只适用于获取处理程序的请求。我需要记录所有请求,甚至是不成功的请求。 –

+2

你想在游戏外登录吗?或者任何时间花费在游戏内部都将被排除在外......我认为网络级别的日志记录最准确,或者在机器上的网络边界(nic和ngnx之间)...... – bwawok

回答

0

那么,为什么不直接调用基类并记录基类中的方法处理它的时间,而不是试图处理自己处理请求的任务呢?换句话说:

override def onRequestReceived(request: RequestHeader) = { 
    val startTime = System.currentTimeMillis() 
    val result = super.onRequestReceived(request) 
    val endTime = System.currentTimeMillis() 
    logger.debug("Request lasted:" + (endTime - startTime) + " ms") 
    result 
} 
相关问题