使用 Scala HTTP 过滤器记录请求正文



我正在使用此过滤器来保存有关请求和响应时间的日志:

import play.api.Logger
import play.api.mvc._
import scala.concurrent.Future
import play.api.libs.concurrent.Execution.Implicits.defaultContext
object LoggingFilter extends Filter {
  def apply(nextFilter: (RequestHeader) => Future[SimpleResult])
           (requestHeader: RequestHeader): Future[SimpleResult] = {
    val startTime = System.currentTimeMillis
    nextFilter(requestHeader).map { result =>
      val endTime = System.currentTimeMillis
      val requestTime = endTime - startTime
      Logger.info(s"${requestHeader.method} ${requestHeader.uri} " +
        s"took ${requestTime}ms and returned ${result.header.status}")
      result.withHeaders("Request-Time" -> requestTime.toString)
    }
  }
}

但是我需要将请求正文保存在日志中。 我知道这可以使用 Scala 动作组合来完成,但我无法弄清楚如何完成此操作。有什么帮助吗??

如果要访问请求正文,则需要重写EssentialFilter对象的方法apply(EssentialAction)

供参考:

  • 播放文档,"更强大的过滤器"段落
  • 了解播放过滤器 API,作者:James Roper

最新更新