You are here

class MessageFormatter in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/guzzlehttp/guzzle/src/MessageFormatter.php \GuzzleHttp\MessageFormatter

Formats log messages using variable substitutions for requests, responses, and other transactional data.

The following variable substitutions are supported:

  • {request}: Full HTTP request message
  • {response}: Full HTTP response message
  • {ts}: ISO 8601 date in GMT
  • {date_iso_8601} ISO 8601 date in GMT
  • {date_common_log} Apache common log date using the configured timezone.
  • {host}: Host of the request
  • {method}: Method of the request
  • {uri}: URI of the request
  • {host}: Host of the request
  • {version}: Protocol version
  • {target}: Request target of the request (path + query + fragment)
  • {hostname}: Hostname of the machine that sent the request
  • {code}: Status code of the response (if available)
  • {phrase}: Reason phrase of the response (if available)
  • {error}: Any error messages (if available)
  • {req_header_*}: Replace `*` with the lowercased name of a request header to add to the message
  • {res_header_*}: Replace `*` with the lowercased name of a response header to add to the message
  • {req_headers}: Request headers
  • {res_headers}: Response headers
  • {req_body}: Request body
  • {res_body}: Response body

Hierarchy

Expanded class hierarchy of MessageFormatter

File

vendor/guzzlehttp/guzzle/src/MessageFormatter.php, line 36

Namespace

GuzzleHttp
View source
class MessageFormatter {

  /**
   * Apache Common Log Format.
   * @link http://httpd.apache.org/docs/2.4/logs.html#common
   * @var string
   */
  const CLF = "{hostname} {req_header_User-Agent} - [{date_common_log}] \"{method} {target} HTTP/{version}\" {code} {res_header_Content-Length}";
  const DEBUG = ">>>>>>>>\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);
  }
  private function headers(MessageInterface $message) {
    $result = '';
    foreach ($message
      ->getHeaders() as $name => $values) {
      $result .= $name . ': ' . implode(', ', $values) . "\r\n";
    }
    return trim($result);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
MessageFormatter::$template private property @var string Template used to format log messages
MessageFormatter::CLF constant Apache Common Log Format. @link http://httpd.apache.org/docs/2.4/logs.html#common
MessageFormatter::DEBUG constant
MessageFormatter::format public function Returns a formatted message string.
MessageFormatter::headers private function
MessageFormatter::SHORT constant
MessageFormatter::__construct public function