我正在尝试使用 Common Log Format 记录我的 Play 应用程序收到的每个请求。
我可以在 Filter 中获取所有这些字段除了身长以外都还好。
我注意到,调用 Play 会返回 Content-Length
,因为 Play 会自动计算出它,而无需您告诉它(除非您正在使用 Chunked Responses 等做一些时髦的事情)。
这会让我相信,在过滤器中,我可以简单地调用
next(rh).map{ response => log(response.header.headers.get("Content-Length")); response }
但是这会返回None
!然而,当我 curl 任何调用时,我都会看到标题。这意味着 Content-Length
必须在 Filter
之后设置,但是在哪里呢?我如何/可以从 Global.scala 访问它?如果没有,那么任何人都知道获取此信息的简单方法(通过编程或其他方式)。
我使用的是 Play 2.2.3
最佳答案
回复内容长度是在将数据写回netty响应的iteratee中设置的,它会根据推送到iteratee的内容选择是否应该设置内容长度或开始对响应进行分块,因此实际上不会计算您可以在过滤器中访问的任何位置。您可以在此处检查发生这种情况的来源:
关于scala - Play 何时何地设置 Content-Length header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25651354/