2


このようなRestHelperを拡張するクラスがあるリフトプロジェクトがあります

   serve{
        "api" / "mystuff" prefix {
         case a => ...
         case b => ...
          }
    }

各caseステートメントに追加せずにすべてのリクエスト(POSTパラメーターを含む)とレスポンスをログに記録するにはどうすればよいですか?

4

3 に答える 3

2

リクエストをログに記録するには、LiftRules.statelessRewrite(bootstrap.liftweb.Boot内)を使用できます。

LiftRules.statelessRewrite.append {
   case RewriteRequest(ParsePath("api" :: key :: Nil, "", true, _), _, _) =>
      log.info("REST: %s" format key)
      RewriteResponse("api" :: key :: Nil,true)
}

これは、次のRESTサーバーの前にインターセプトされます。

case "api":: key :: Nil Get _ => {
  val email = S.param("email") getOrElse {
    "missing email parameter"
  }
  Full(PlainTextResponse("succeeded: %s, %s" format (key,email)))
}

URLパラメータが保持されていることに注意してください。

使用する応答をログに記録するにはLiftRules.afterSend

アップデート:

afterSendを使用すると、実際には要求と応答の両方にアクセスできます。

于 2012-05-30T17:44:06.147 に答える
1

サーブメソッドとプレフィックスメソッドはそれぞれ、PartialFunction [Req、Box[LiftResponse]]を取ります。RestHelperは多くの便利なメソッドと暗黙の変換を提供するため、これらのタイプを直接使用していませんが、それでもReqに直接アクセスできます。「api」/「mystuff」プレフィックス付きURLへのアクセスのログ記録のみに関心がある場合、それはダーティですが、次のようなことができると思います。

object Log {

  def unapply(req: Req): Option[Boolean] = {
     ... code to log the request ....
     None
   }

}

serve{
  "api" / "mystuff" prefix {
    case Log(true) => //matching code will always be called but never match
    case a => ...
    case b => ...
  }
}
于 2012-05-30T19:16:52.337 に答える
0

リフトクックブックのリクエストのデバッグに従ってLiftRules.onBeginServicing、次を使用できますLiftRules.onEndServicing

LiftRules.onBeginServicing.append {
  case r => println("Received: "+r)
}

LiftRules.onEndServicing.append {
    case (req, Full(resp)) => println("Responded: " + resp)
}
于 2016-05-27T13:53:44.647 に答える