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 )“ |
