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:
- 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"
- Log-Eintrag, der die Anforderungsdauer und den Antwortstatus beinhaltet: Format:
"Duration: {req_time}, Response: {code}"
Beispiel Output: "Duration: 1.123, Response: 200"
- 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:
Parameter | Beschreibung | Beispiel 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 )“ |