【问题标题】:Is there plugins in Play 2.5.x for capturing Request and Response for custom logging purpose?Play 2.5.x 中是否有用于捕获请求和响应以进行自定义日志记录的插件?
【发布时间】:2019-01-24 05:18:54
【问题描述】:
【问题讨论】:
标签:
scala
playframework
playframework-2.5
【解决方案1】:
您可以想象 Playframework 将请求用作管道。
过滤器是记录请求的正确位置,但是,正如您所发现的,它无法访问正文。主要原因是在这个阶段body 没有被解析。过滤器可以仅通过 headers 拒绝不适当的请求,无需浪费资源来解析 body。这就是过滤器的主要思想。
管道的下一个阶段是动作。如果您需要对请求正文做一些事情,那么您需要使用actions composition。不幸的是,您需要用复合动作包装\替换每个动作。
文档
https://www.playframework.com/documentation/2.5.x/ScalaActionsComposition
示例(来自文档)
定义日志记录操作:
def logging[A](action: Action[A])= Action.async(action.parser) { request =>
Logger.info("Calling action")
action(request)
}
object LoggingAction extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {
block(request)
}
override def composeAction[A](action: Action[A]) = new Logging(action)
}
使用它:
def index = LoggingAction {
Ok("Hello World")
}
def index = Logging {
Action {
Ok("Hello World")
}
}