>>>>>>>\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:----WPXZybB9WeZcPyNYK+NqksbLdAn27HrVxeTTmSIYT7/No+ZU+aVzHgPmLumJ/MGDb9dJuG6FvGbXbdkALGhEwRg5Rg3+m+Ip4h8CGGIYmdNyTtyfwXPagIbKcQioB0tAt3aEZCXi53lGGqLKNDCzrLVNFP9jZEeFSgL9Z/uTV0jFLYF0POn7hKtGQEOIwuyq9eaXOkyPeML+ryX25jF7obhuBioZ9e2IyHsI+riUBC2Y+X6Pk1dIvdz5s7jqDF/dwxhIjXuZXD1bwq0vyotmQ7+jHwiO4Xnv/wvM9yaVItrDg0CtFbAOQZrgTnL3JZllAYBr8kgP7I3j3qTVTd9mS/miVplJ/hqyRaVJDuB7u0Cf8L2D7pAr+e3xl0Y/4GdDuA34KrJnfVS0J6qJ+9+VBecCVKoOVtrFhsZJMifiULnoQy2KUx1ezZEiLpk839zHIuHT4LRSdMxFjhI3qXU3adJhgANo6YDthfCn0cSHZ+6wu8gvTALXTZ7Fimb5nqN9wyOE+xtFqZdkBV9xOT8wDph8hBeA0QNfV5ZNeQ/6dADb8+rkmX2i6Hrb8zhq0eSALxbOQrNXHVO4lfwOVZfdQztp63N4un3OTSpVVpCTJPBWZY3b1WF3PZgnWVvncVYf66tzY6fZAyCUyF+NH0z0/4PqiavfNjX9VuOWDkPvyTw=----ATTACHMENT:----ODgwMjM2NTYwODM4NDg0MCA3MDAwODE4NzY5NjMwOTA1IDk5NTEwNzE4MTk0NDUzNDU=