一.
1.
builds.scala加上filter的依赖
libraryDependencies ++= Seq(
jdbc,
anorm,
cache,
ws,
filters
)
2.在App目录下创建
Global.scala
import play.api.mvc._
import play.filters.gzip.GzipFilter
object Global extends WithFilters(LoggeringFilter,new GzipFilter())
{
}
LoggeringFilter.scala
import play.api.Logger
import play.api.mvc._
import scala.concurrent.Future
import play.api.libs.concurrent.Execution.Implicits.defaultContext
object LoggeringFilter extends Filter{
def apply(nextFilter:(RequestHeader) => Future[Result])(requestHeader:RequestHeader):Future[Result] = {
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("Requeat-Time" -> requestTime.toString)
}
}
}
结果
二.使用EssentialFilter
Play provides a lower level filter API called EssentialFilter
which gives you full access to the body of the request. This API allows you to wrap EssentialAction with another action.
import play.api.Logger
import play.api.mvc._
import play.api.libs.concurrent.Execution.Implicits.defaultContext
object LoggingFilter extends EssentialFilter {
def apply(nextFilter: EssentialAction) = new EssentialAction {
def apply(requestHeader: RequestHeader) = {
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)
}
}
}
}