Wie werden Akka HTTP-Client-Anforderungen protokolliert?

Ich muss akka http-Client-Anforderungen sowie deren Antworten protokollieren. Es scheint zwar einen Hinweis auf eine API für die Protokollierung dieser Anforderungen zu geben, es gibt jedoch keine eindeutige Dokumentation, wie dies erfolgen soll. Mein Ansatz war es, eine protokollierte Anforderung zu erstellen, die transparent @ umschließHttp().singleRequest(req) wie folgt

def loggedRequest(req: HttpRequest)
                  (implicit system: ActorSystem, ctx: ExecutionContext, m: Materializer): Future[HttpResponse] = {

  Http().singleRequest(req).map { resp ⇒
    Unmarshal(resp.entity).to[String].foreach{s ⇒
      system.log.info(req.toString)
      system.log.info(resp.toString + "\n" + s)
    }
    resp
  }
}

Leider muss ich die Zukunft entweder durch das Unmarshal oder durch einfaches Anfordern von @ ergreifresp.entity.dataBytes, um den Hauptteil der Antwort wiederherzustellen. Ich erhalte die Protokollierung, aber das Versprechen wird erfüllt und ich kann die Entität nicht mehr für die tatsächlichen Daten dekomprimieren. Eine funktionierende Lösung würde die Anforderung und die Antwort protokollieren und diesen Testfall ohne ein @ besteheIllegalStateException mit "Versprechen bereits erfüllt" wird geworfen:

describe("Logged rest requests") {

  it("deliver typed responses") {
    val foo = Rest.loggedRequest(Get(s"http://127.0.0.1:9000/some/path"))
    val resp = foo.futureValue(patience)
    resp.status shouldBe StatusCodes.OK
    val res = Unmarshal(resp.entity).to[MyClass].futureValue
  }
}

Ideen willkommen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage