2014-01-17 134 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 
} 
相關問題