Skip to content

Instantly share code, notes, and snippets.

@codesurf42
Last active August 29, 2015 14:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codesurf42/70eaaf13ade2eefe1dcf to your computer and use it in GitHub Desktop.
Save codesurf42/70eaaf13ade2eefe1dcf to your computer and use it in GitHub Desktop.
Scala Play filter to dump body / everything
import java.net.URLDecoder
import play.api.Logger
import play.api.libs.iteratee.Iteratee
import play.api.mvc.{ Result, RequestHeader, Filter }
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import scala.concurrent.Future
object LoggingFilter extends Filter {
override def apply(nextFilter: (RequestHeader) => Future[Result])(rh: RequestHeader): Future[Result] = {
val startTime = System.currentTimeMillis()
nextFilter(rh).map { result =>
val endTime = System.currentTimeMillis()
val requestTime = endTime - startTime
// additionally, "uncrypt" URL-encoded input
def decoder(s: String) = URLDecoder.decode(s, "US-ASCII")
val decoded = rh.queryString.map {
case (s, ss) =>
(decoder(s),
ss.map {
decoder(_)
})
}
Logger.info(s"LF: ${rh.method} ${rh.uri} DEC:${decoded}} took ${requestTime}ms, ret: [${result.header.status}]")
val consumeForeach = Iteratee.foreach[Array[Byte]](s => Logger.debug("BChunk: " + s.map(_.toChar).mkString))
result.body |>>> consumeForeach
result
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment