【问题标题】: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
【问题描述】:

我正在寻找任何可能的解决方案/插件来捕获来自 Play 2.5.x 的请求和响应,以进行自定义日志记录。

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

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

【问题讨论】:

    标签: 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")
      }
    }
    

    【讨论】:

    • 非常感谢,这真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 2017-08-07
    • 1970-01-01
    • 2021-06-07
    • 2012-09-20
    • 2018-12-20
    • 2015-04-19
    • 2014-11-17
    相关资源
    最近更新 更多