我正在寻找一种在 Play 框架中打印响应正文的方法,我有这样的代码:
object AccessLoggingAction extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {
Logger.info(s"""Request:
id=${request.id}
method=${request.method}
uri=${request.uri}
remote-address=${request.remoteAddress}
body=${request.body}
""")
val ret = block(request)
/*
ret.map {result =>
Logger.info(s"""Response:
id=${request.id}
body=${result.body}
""")
}
*/ //TODO: find out how to print result.body (be careful not to consume the enumerator)
ret
}
}
目前,注释掉的代码没有按我的意愿工作,我的意思是,它会打印:
Response:
id=1
body=play.api.libs.iteratee.Enumerator$$anon$18@39e6c1a2
所以,我需要找到一种从 Enumerator[Array[Byte]] 中获取字符串的方法。我试图通过阅读以下内容来掌握枚举器的概念:http: //mandubian.com/2012/08/27/understanding-play2-iteratees-for-normal-humans/
所以...,如果我理解正确的话:
我不应该在将枚举数转换为字符串的过程中干涸。否则,客户端将一无所获。
假设我弄清楚了如何实现 T/filter 机制。但是……它不会破坏 Play 框架作为非阻塞流框架的目的(因为我会在内存中建立完整的字节数组,然后再调用它,最后记录它)?
那么,记录响应的正确方法是什么?
提前致谢, 拉卡