Play 2.5.x 中是否有用于捕获自定义日志记录请求和响应的插件?

Is there plugins in Play 2.5.x for capturing Request and Response for custom logging purpose?

我正在寻找任何可能的 solutions/plugins 来捕获来自 Play 2 的请求和响应。5.x 以进行自定义日志记录。

我找到了 https://www.playframework.com/documentation/2.5.x/ScalaHttpFilters 过滤器,但是它无法获取请求正文。有什么办法吗?

预期的结果应该是请求和响应中的所有信息包括头和正文,所以我可以构建一个自定义结构并将其记录在 ElasticSearch 中。

您可以想象 Playframework 将请求作为管道工作。

过滤器 是记录请求的正确位置,但是,如您所见,它无法访问 body.这主要是因为在这个阶段body没有被解析。过滤器可以通过headers拒绝不合适的请求,不需要浪费资源去解析body。这就是过滤器的主要思想。

流水线的下一个阶段是动作。如果您需要对请求 的body 做一些事情,那么您需要使用动作组合。不幸的是,您需要 wrap\replace 每个动作 与您的复合动作。

文档

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")
  }
}