播放2.6.x记录请求正文和处理时间

sup*_*oss 5 scala playframework

我正在使用播放服务器2.6.x并尝试记录请求正文和每个请求的处理时间.

问题是,如果我使用Play Filterapi,我无法访问请求正文,如果我使用play Actionapi来包装动作,因为LoggingAction我可以访问正文但无法获得响应时间,所以我必须使用它们并为每个请求创建一个唯一的id,并按请求ID更新日志.

在我看来,必须有更优雅的解决方案.

sup*_*oss 0

我也找到了我的问题的答案,对我来说似乎更简单,所以我将分享它。

它涉及创建您自己的Action请求主体,以便能够解析请求正文并记录所有标头。

case class LoggingAction @Inject(override val parser: BodyParsers.Default)(implicit ec:ExecutionContext) extends ActionBuilderImpl(parser){
  override def invokeBlock[A](request: Request[A], invoke: (Request[A] => Future[Result])): Future[Result] ={
    val startTime = System.currentTimeMillis
    try {
      invoke(request).map(res => {
        val processTime: Long = System.currentTimeMillis - startTime
        Logger.log(request,time)
        res
      })
    } catch {
      // Throw some error...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)