package Ġcom . ba eld ung . log filter . decorator Ċ Ċ import Ġcom . ba eld ung . log filter . asString Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . springframework . core . io . buffer . Data Buffer Ċ import Ġorg . springframework . http . HttpMethod Ċ import Ġorg . springframework . http . server . reactive . Server HttpRequest Ċ import Ġorg . springframework . http . server . reactive . Server HttpRequest Decorator Ċ import Ġorg . springframework . util . StringUtils Ċ import Ġreactor . core . publisher . Flux Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . nio . channels . Channels Ċ import Ġjava . util .* Ċ Ċ class ĠLogging Request Decorator Ġinternal Ġconstructor ( log : ĠLogger , Ġdelegate : ĠServer HttpRequest ) Ġ: ĠServer HttpRequest Decorator ( delegate ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbody : ĠFlux < Data Buffer >? ĊĊĠĠĠ Ġoverride Ġfun Ġget Body (): ĠFlux < Data Buffer > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbody !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( log . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġdelegate . uri . path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġdelegate . uri . query ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĠOptional . of Nullable ( delegate . method ). orElse ( HttpMethod . GET ). name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġdelegate . headers . asString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{} Ġ{}\ n Ġ{}", Ġmethod , Ġpath Ġ+ Ġ( if Ġ( StringUtils . has Text ( query )) Ġ"? $ query " Ġelse Ġ""), Ġheaders ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġsuper . getBody (). do On Next Ġ{ Ġbuffer : ĠData Buffer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Stream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannels . new Channel ( body Stream ). write ( buffer . as ByteBuffer (). as ReadOnly Buffer ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug ("{} : Ġ{}", Ġ" request ", ĠString ( body Stream . toByteArray ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġsuper . getBody () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }