sup*_*oss 5 scala playframework
我正在使用播放服务器2.6.x并尝试记录请求正文和每个请求的处理时间.
问题是,如果我使用Play Filterapi,我无法访问请求正文,如果我使用play Actionapi来包装动作,因为LoggingAction我可以访问正文但无法获得响应时间,所以我必须使用它们并为每个请求创建一个唯一的id,并按请求ID更新日志.
在我看来,必须有更优雅的解决方案.
我也找到了我的问题的答案,对我来说似乎更简单,所以我将分享它。
它涉及创建您自己的Action请求主体,以便能够解析请求正文并记录所有标头。
case class LoggingAction @Inject(override val parser: BodyParsers.Default)(implicit ec:ExecutionContext) extends ActionBuilderImpl(parser){
override def invokeBlock[A](request: Request[A], invoke: (Request[A] => Future[Result])): Future[Result] ={
val startTime = System.currentTimeMillis
try {
invoke(request).map(res => {
val processTime: Long = System.currentTimeMillis - startTime
Logger.log(request,time)
res
})
} catch {
// Throw some error...
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
466 次 |
| 最近记录: |