Angular, AWS und Symfony Freelancer

GuzzleHttp loggen aller Requests nach Monolog

Um alle Requests und Responses zu loggen, die mittels Guzzle in einer Symfony Applikation getätigt werden, kann man Guzzle folger Maßen konfigurieren:

    guzzle.handler_stack_log:
      class: 'GuzzleHttp\HandlerStack'
      factory: [ GuzzleHttp\HandlerStack, create ]
      calls:
        - [ push, [ '@guzzle.middleware_log', 'log_default' ] ]

    guzzle.middleware_log:
      class: callback
      factory: [ GuzzleHttp\Middleware, log ]
      arguments:
        - '@monolog.logger.my_guzzle_log'
        - '@GuzzleHttp\MessageFormatter'

    GuzzleHttp\MessageFormatter:
      - "Request:\n{request}\nDuration: {req_time}\nResponse:\n{response}\nError:\n{error}"

Damit werden alle Logs nach zum Monolog Service monolog.logger.my_guzzle_log weitergeleitet.

Der MessageFormatter unterstützt verschiedene Formatzeichenfolgen, die Sie in Ihren Protokollen verwenden können. Hier sind fünf nützliche GuzzleHttp\MessageFormatter-Formate:

  1. Log-Eintrag, der die URL, Methode, und Status-Code umfasst: Format: "Request: {method} {uri}, Response: {code}"

Beispiel Output: "Request: GET http://example.com, Response: 200"

  1. Log-Eintrag, der die Anforderungsdauer und den Antwortstatus beinhaltet: Format: "Duration: {req_time}, Response: {code}"

Beispiel Output: "Duration: 1.123, Response: 200"

  1. Log-Eintrag, der die Anfrage, Antwort und etwaige Fehler anzeigt: Format: "Request:\n{request}\nResponse:\n{response}\nError:\n{error}"

Beispiel Output:

Request:
GET / HTTP/1.1
Host: example.com

Response:
HTTP/1.1 200 OK
Content-Length: 348
Content-Type: text/html

Error:
None

Der GuzzleHttp\MessageFormatter unterstützt eine Vielzahl von Platzhaltern, die in den Formatstrings verwendet werden können. Hier ist eine Liste einiger der verfügbaren Platzhalter:

ParameterBeschreibungBeispiel Output
{request}Vollständige HTTP-Anforderungsnachricht„GET / HTTP/1.1\r\nHost: example.com\r\nAccept: */*\r\n“
{response}Vollständige HTTP-Antwortnachricht„HTTP/1.1 200 OK\r\nContent-Length: 348\r\nContent-Type: text/html\r\n“
{ts}Timestamp„1519211809.123456“
{date_iso_8601}Aktuelles Datum im ISO 8601 Format„2023-06-03T14:30:00Z“
{date_common_log}Aktuelles Datum im Common Log Format„03/Jun/2023:14:30:00 +0000“
{host}Der Host der Anforderung„example.com“
{method}HTTP-Methode der Anforderung„GET“
{uri}URI der Anforderung„http://example.com“
{version}HTTP-Version„1.1“
{target}Anforderungsziel (Pfad + Abfragestring der URI)„/path?query=example“
{hostname}Der Hostname des lokalen Rechners„localhost“
{code}Statuscode der Antwort„200“
{phrase}Statusphrase der Antwort„OK“
{error}Error message„Error: Connection refused“
{req_header_User-Agent}Einzelner Request-Header„GuzzleHttp/6.3.3 curl/7.54.0 PHP/7.2.7“
{res_header_Content-Type}Einzelner Response-Header„text/html“
{req_headers}Kopfzeilen der Anforderung„Host: example.com\r\nUser-Agent: GuzzleHttp/6.3.3 curl/7.54.0 PHP/7.2.7\r\n“
{res_headers}Kopfzeilen der Antwort„Content-Type: text/html\r\nContent-Length: 348\r\n“
{req_body}Anforderungskörper„name=John+Doe“
{res_body}Antwortkörper„Hello, John Doe!“
{req_body_size}Größe des Anforderungskörpers„13“
{res_body_size}Größe des Antwortkörpers„15“
{curl_err}Fehlermeldung von cURL (falls vorhanden)„Couldn’t resolve host name“
{curl_info}Information von cURL (falls vorhanden)„Array ( [url] => http://example.com [content_type] => text/html [http_code] => 200 [header_size] => 228 [request_size] => 78…)“
{curl_version}cURL-Version (falls verwendet)„7.54.0“
{handler_stats}Handler spezifische Statistiken (falls verfügbar)„Array ( [total_time] => 0.152404 [namelookup_time] => 0.02914 [connect_time] => 0.049718 )“


Posted

in

by

Tags: