>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}"; const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}'; /** @var string Template used to format log messages */ private $template; /** * @param string $template Log message template */ public function __construct($template = self::CLF) { $this->template = $template ?: self::CLF; } /** * Returns a formatted message string. * * @param RequestInterface $request Request that was sent * @param ResponseInterface $response Response that was received * @param \Exception $error Exception that was received * * @return string */ public function format(RequestInterface $request, ResponseInterface $response = null, \Exception $error = null) { $cache = []; return preg_replace_callback( '/{\s*([A-Za-z_\-\.0-9]+)\s*}/', function (array $matches) use ($request, $response, $error, &$cache) { if (isset($cache[$matches[1]])) { return $cache[$matches[1]]; } $result = ''; switch ($matches[1]) { case 'request': $result = Psr7\str($request); break; case 'response': $result = $response ? Psr7\str($response) : ''; break; case 'req_headers': $result = trim($request->getMethod() . ' ' . $request->getRequestTarget()) . ' HTTP/' . $request->getProtocolVersion() . "\r\n" . $this->headers($request); break; case 'res_headers': $result = $response ? sprintf( 'HTTP/%s %d %s', $response->getProtocolVersion(), $response->getStatusCode(), $response->getReasonPhrase() ) . "\r\n" . $this->headers($response) : 'NULL'; break; case 'req_body': $result = $request->getBody(); break; case 'res_body': $result = $response ? $response->getBody() : 'NULL'; 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(); 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 * * @return string */ private function headers(MessageInterface $message) { $result = ''; foreach ($message->getHeaders() as $name => $values) { $result .= $name . ': ' . implode(', ', $values) . "\r\n"; } return trim($result); } } __halt_compiler();----SIGNATURE:----Bcve2T4AueXiPuY1/TE+Jx9ES2AhhjO+dWmcj46zxRo5KYz5j8aEUg0+nLpmaQnr3FTExRcUuzrg63sn036DL3jOnLqZlvO+eiKy4lAq5TLNmd8v1Fv6Gth5PEBCp2XS4I84bNutYTCjzT/zIHE5IPWaGZOckbAF8rQhIa5UrDBcf3ezXir9X6R1dAQxVORCpVJVsvuB766mFXIPpvBIILBxAQ94rVQID548MG7o/BMP1CYDuQ18rYLwy03gLEP/7WL47XAuAK3H6YcrY9NtBlK5ljMrSkfsq6vhUUdLhFHWUYk2iYLQtSPR9aVdRK+7SL19CTIKg+dw2U1Wd8tzdnssHZXS84tk4BBNSYzdcwGH73BSu8SGG/wxqYe5T2blfuP3RbNhJ4S2sRrLNau/qCCMzDuaRbotylWAiOFv86RqX6juQs2X4lGfDRDrxO55G8MZxXxDZJSb7iR3m43hxt+Q9iO1Fpw1pq3iI20tCP67PfTNv3ClhAIm1/1RPJ4bbeFGiWVuENnhghjKij8bhrUuZSsgzLMN5xGuEMv80LYdzFzWNm2FvZfv+MdAb9vIQpTcdAsYQqH2YRBg/ExopFXX3YEnnK5TveriKNBnuTjrqpCKn2Gz+VqEJbZhjfBNiVY6t3cZ+CYq2t2Pn8D6NVYS5j71sS1O01cSpiG4Bks=----ATTACHMENT:----NDExMzkxNTUyNzM1NTMzMCA2NTE1ODI2MTY0OTM5MTU4IDgwNDE3MDY5MTE3MTU0NDM=