Sto cercando un modo per stampare il corpo della risposta nel quadro Play, ho un codice come questo:Play/Logging/Stampa Response corpo/Investito enumeratore/tamponare il corpo
object AccessLoggingAction extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {
Logger.info(s"""Request:
id=${request.id}
method=${request.method}
uri=${request.uri}
remote-address=${request.remoteAddress}
body=${request.body}
""")
val ret = block(request)
/*
ret.map {result =>
Logger.info(s"""Response:
id=${request.id}
body=${result.body}
""")
}
*/ //TODO: find out how to print result.body (be careful not to consume the enumerator)
ret
}
}
Attualmente la codice commentato-out non funziona come volevo, voglio dire, sarebbe stampare:
Response:
id=1
[email protected]
Così, ho bisogno di trovare un modo per ottenere una stringa di Enumerator [Array [Byte]]. Ho cercato di afferrare il concetto di Enumerator leggendo questo: http://mandubian.com/2012/08/27/understanding-play2-iteratees-for-normal-humans/
Quindi ..., se ho capito bene:
dovrei asciutto-up l'enumeratore nel processo di convertirlo accordare. Altrimenti, il cliente non riceverebbe nulla.
Supponiamo di capire come implementare il meccanismo T/filtro. Ma poi ... non sarebbe in grado di sconfiggere lo scopo di Play framework come framework di streaming non bloccante (perché vorrei costruire l'intera gamma di byte in memoria, prima di chiamare a Stringa su di esso e infine registrarlo)?
Quindi, qual è il modo corretto di registrare la risposta?
Grazie in anticipo, Raka
È necessario registrare la risposta in modo che sia in streaming. Per esempio. 'System.out' è un' OutputStream', puoi loggarti in streaming (anche se potresti avere due risposte interfogliate). Se si accede a un database, è possibile eseguire lo streaming. E così via. – lmm
Penso di aver trovato la risposta, qui: http://stackoverflow.com/questions/17752151/scala-play-2-1-accession-request-and-response-bodies-in-a-filter –