このようなRestHelperを拡張するクラスがあるリフトプロジェクトがあります
serve{
"api" / "mystuff" prefix {
case a => ...
case b => ...
}
}
各caseステートメントに追加せずにすべてのリクエスト(POSTパラメーターを含む)とレスポンスをログに記録するにはどうすればよいですか?
リクエストをログに記録するには、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を使用すると、実際には要求と応答の両方にアクセスできます。
サーブメソッドとプレフィックスメソッドはそれぞれ、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 => ...
}
}
リフトクックブックのリクエストのデバッグに従ってLiftRules.onBeginServicing
、次を使用できますLiftRules.onEndServicing
。
LiftRules.onBeginServicing.append {
case r => println("Received: "+r)
}
LiftRules.onEndServicing.append {
case (req, Full(resp)) => println("Responded: " + resp)
}