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")
}
}
我正在寻找任何可能的 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")
}
}