w:@Cz 5QO郣A :"lja(V hp#x6 T[|pG9jڈ{c:&]Kd}nXU6psӛ+ Y[(uxhk.Qo)ȹ͖!Eff9+!]*UI2RŲ)Oy\?΁k~+\; rg=~[0S/[S~X)VT$.q}ɺdR IKP:GiMV+4}?z@UVfsf^N7a]ˤ=EAj&]ZqPednBH  ǼɳNsfA/[uT$SCOE,naf;~;'1ſ}Jx-t5]VtA9BwbV}D=X3H|Nx򧆘AWG}\[㥁-VUT m ;Gf1'fVbw`jf__Y+őWt̐S^)|FGY!a]tY8'TwNI]=a`i.3.-%u(.;=p)EEijhFP@p)QC|asو-_p 3azv/V]qaO+LB`򯟸߻߲78+ZA4qpT7UiSJgnޡb;4" i6[)AH:k,\sW$f\QM6 뭅EhJ!o U_ Y7PY Mor]u=d= Ch_mpE$*~-eɴnwi7 gWVGH*bVhrIei  glLC\.1.Kj[z_f'O"e\j˩g`+~*!Mqb_}!}2_☃: clUKVX4$TtwgU}cVMX͞E,qE1v&xuuQ,p3/(9P^@+&G" ڃ ?Mfʻ_Ӯ Eurns5T ƴ`sN9ew+ w:yC%87:|h%z|d O.-jΞְaOR c0?hB!.ZZ =@lԬ(lq~U&$2%fc^Դq㇑Y8N*ؗw`ĕ/IQ&OA\ljڊ/bAK8`Gql|&-K0GzR=ٳAeGkmNzKn'rď+[3{A*@i w#wDzsn| CRW`]Pz=U%*t95ϩ؍.(@'@ght#kTH*.2R'gd{ U'O&:EBゝC1.'UП;9ȷ`8N*RN(Ocs'~M({L2j\9Z䶟(}N`'m$M͉V!49Co^|czb~<"c `N#%zdRX;# Rܺ0]5oTaZ{=P NDF pMQ/9]LjbzL%w]X#HKvKw"oa:Oy;8 XK"Iae] ٲ5O {(7h1ô0m~ۧǮ!sg2" X:1B|CAK/;jeWYU啱^ Bu; |/+S&~ƳP\w}9n1BI|ѓӦ2@o+FdȠ@s&GJ?[1KF#`-g|Y"0.n|A#+K\2"DROk' ~!^jTP%Ldو 7onBou"KJuFwl`;0{‘6b{8 h{n*X o<㍯nvPkLv(r_"u~6ܛ'f9 eniwgFN5K]O<]vUdmJL9bVE+#L=`,wgFN5K]OAϗfOb^9wmyX@Jk;ߜ)c#%H1o_7H:FFCO羳O9#y0끅de=_C/Jɗ7 (qruZ cY;-ۺwgFN5K]O!Ḧ́+/^ssgng/-Q>L g^Dpc o wgFN5K]Op]O> Ɏ ^sD:(!>%wgFN5K]O>_ b+堜1iΓ̟]ݫ><Հڔ?~v|P_.)wgFN5K]OE&3Դ4AzŁnDФ; wgFN5K]O:BGwgFN5K]OɛVx4^*(1uI=UQ6T^?8'wgFN5K]OוdΙeyv>Q'xuF'; )."\r\n".$this->headers($response) : 'NULL'; break; case 'req_body': $result = $request->getBody()->__toString(); break; case 'res_body': if (!$response instanceof ResponseInterface) { $result = 'NULL'; break; } $body = $response->getBody(); if (!$body->isSeekable()) { $result = 'RESPONSE_NOT_LOGGEABLE'; break; } $result = $response->getBody()->__toString(); break; case 'ts': case 'date_iso_8601': $result = \gmdate('c'); break; case 'date_common_log': $result = \date('d/M/Y:H:i:s O'); break; case 'method': $result = $request->getMethod(); break; case 'version': $result = $request->getProtocolVersion(); break; case 'uri': case 'url': $result = $request->getUri()->__toString(); break; case 'target': $result = $request->getRequestTarget(); break; case 'req_version': $result = $request->getProtocolVersion(); break; case 'res_version': $result = $response ? $response->getProtocolVersion() : 'NULL'; break; case 'host': $result = $request->getHeaderLine('Host'); break; case 'hostname': $result = \gethostname(); break; case 'code': $result = $response ? $response->getStatusCode() : 'NULL'; break; case 'phrase': $result = $response ? $response->getReasonPhrase() : 'NULL'; break; case 'error': $result = $error ? $error->getMessage() : 'NULL'; break; default: // handle prefixed dynamic headers if (\strpos($matches[1], 'req_header_') === 0) { $result = $request->getHeaderLine(\substr($matches[1], 11)); } elseif (\strpos($matches[1], 'res_header_') === 0) { $result = $response ? $response->getHeaderLine(\substr($matches[1], 11)) : 'NULL'; } } $cache[$matches[1]] = $result; return $result; }, $this->template ); } /** * Get headers from message as string */ private function headers(MessageInterface $message): string { $result = ''; foreach ($message->getHeaders() as $name => $values) { $result .= $name.': '.\implode(', ', $values)."\r\n"; } return \trim($result); } }