42 const CLF =
"{hostname} {req_header_User-Agent} - [{date_common_log}] \"{method} {target} HTTP/{version}\" {code} {res_header_Content-Length}";
43 const DEBUG =
">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}";
44 const SHORT =
'[{ts}] "{method} {target} HTTP/{version}" {code}';
52 public function __construct($template = self::CLF)
54 $this->
template = $template ?: self::CLF;
66 public function format(
69 \Exception $error =
null
73 return preg_replace_callback(
74 '/{\s*([A-Za-z_\-\.0-9]+)\s*}/',
75 function (array $matches) use ($request, $response, $error, &$cache) {
76 if (isset($cache[$matches[1]])) {
77 return $cache[$matches[1]];
81 switch ($matches[1]) {
83 $result = Psr7\str($request);
86 $result = $response ? Psr7\str($response) :
'';
89 $result = trim($request->getMethod()
90 .
' ' . $request->getRequestTarget())
91 .
' HTTP/' . $request->getProtocolVersion() .
"\r\n"
92 . $this->headers($request);
98 $response->getProtocolVersion(),
99 $response->getStatusCode(),
100 $response->getReasonPhrase()
101 ) .
"\r\n" . $this->headers($response)
105 $result = $request->getBody();
108 $result = $response ? $response->getBody() :
'NULL';
111 case 'date_iso_8601':
112 $result = gmdate(
'c');
114 case 'date_common_log':
115 $result = date(
'd/M/Y:H:i:s O');
118 $result = $request->getMethod();
121 $result = $request->getProtocolVersion();
125 $result = $request->getUri();
128 $result = $request->getRequestTarget();
131 $result = $request->getProtocolVersion();
135 ? $response->getProtocolVersion()
139 $result = $request->getHeaderLine(
'Host');
142 $result = gethostname();
145 $result = $response ? $response->getStatusCode() :
'NULL';
148 $result = $response ? $response->getReasonPhrase() :
'NULL';
151 $result = $error ? $error->getMessage() :
'NULL';
155 if (strpos($matches[1],
'req_header_') === 0) {
156 $result = $request->getHeaderLine(substr($matches[1], 11));
157 } elseif (strpos($matches[1],
'res_header_') === 0) {
159 ? $response->getHeaderLine(substr($matches[1], 11))
164 $cache[$matches[1]] = $result;
179 foreach ($message->
getHeaders() as $name => $values) {
180 $result .= $name .
': ' . implode(
', ', $values) .
"\r\n";
183 return trim($result);