Como um log de solicitações do cliente HTTP Akka

Preciso registrar as solicitações do cliente http akka, bem como suas respostas. Embora pareça haver uma dica da API para registrar essas solicitações, não há documentação clara sobre como isso deve ser feito. Minha abordagem foi criar uma solicitação registrada que envolva de forma transparenteHttp().singleRequest(req) do seguinte modo:

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
  }
}

Infelizmente, eu tenho que agarrar o futuro através do unmarshal ou simplesmente solicitandoresp.entity.dataBytes para recuperar o corpo da resposta. Eu recebo o log, mas a promessa é concluída e não posso mais desassociar a entidade dos dados reais. Uma solução funcional registraria a solicitação e a resposta e passaria nesse caso de teste sem umIllegalStateException com "Promessa já concluída" sendo lançada:

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
  }
}

Idéias bem-vindas.

questionAnswers(2)

yourAnswerToTheQuestion