Loguzz is a middleware for Guzzle which logs requests and responses.
You'll need composer to install the package.
composer require anik/loguzz
Find the thorough documentation here.
To log a request, you'll need to push Loguzz\Middleware\LogMiddleware
to Guzzle's handler.
$logger = new \ColinODell\PsrTestLogger\TestLogger();
$handlerStack = \GuzzleHttp\HandlerStack::create();
$options = [];
$handlerStack->push(new \Loguzz\Middleware\LogMiddleware($logger, $options), 'logger');
$logger
is the implementation ofPsr\Log\LoggerInterface
.$options
is an array to change the default behaviour of LogMiddleware.'logger'
is the internal name of the middleware for Guzzle. It can be any name.
// Default values
$options = [
'length' => 100,
'log_request' => true,
'log_response' => true,
'success_only' => false,
'exceptions_only' => false,
'log_level' => 'debug',
'request_formatter' => new \Loguzz\Formatter\RequestCurlFormatter(),
'response_formatter' => new \Loguzz\Formatter\ResponseJsonFormatter(),
'exception_formatter' => new \Loguzz\Formatter\ExceptionJsonFormatter(),
'tag' => '',
'force_json' => true,
'separate' => false,
];
length
- int. Minimum 10. To set the length of when formatting request with\Loguzz\Formatter\RequestCurlFormatter
.log_request
- bool. To enable or disable request logging.log_response
- bool. To enable or disable response logging.success_only
- bool. Only log successful responses. If the server could be reached, it's a success.exception_only
- bool Only log exceptions. Logs when an exception is thrown by Guzzle for connection/timeout related exceptions.log_level
- string. Any valid log level.request_formatter
- instance of \Loguzz\Formatter\AbstractRequestFormatter. Available\Loguzz\Formatter\RequestArrayFormatter
\Loguzz\Formatter\RequestCurlFormatter
\Loguzz\Formatter\RequestJsonFormatter
response_formatter
- instance of \Loguzz\Formatter\AbstractResponseFormatter\Loguzz\Formatter\ResponseArrayFormatter
\Loguzz\Formatter\ResponseJsonFormatter
exception_formatter
- instance of \Loguzz\Formatter\AbstractResponseFormatter\Loguzz\Formatter\ExceptionArrayFormatter
\Loguzz\Formatter\ExceptionJsonFormatter
tag
- string. Empty by default. When non-empty string, it'll log the formatted data under this tag. Tag can be used to search for specific type of request/response in your log file or your storage.force_json
- bool. true by default. It is only applicable when tag is non-empty string. If enabled, it will then log data as json string, otherwise it'll log as an array. If set tofalse
, the code may break due to the type-hint in psr/log interface. If your logger interface supports array, it will work.separate
- bool. It is only applicable when tag is non-empty string. If enabled, it will then log data in{tag}.request
,{tag}.success
,{tag}.failure
for request logging, successful response and error response.
To create a new request formatter you need to extend the \Loguzz\Formatter\AbstractRequestFormatter
class.
To create a new response formatter you need to extend the \Loguzz\Formatter\AbstractResponseFormatter
class.
To create a new exception formatter you need to extend the \Loguzz\Formatter\AbstractExceptionFormatter
class.
Implementations of \Loguzz\Formatter\AbstractRequestFormatter::format
accept parameters as
\Psr\Http\Message\RequestInterface $request
array $options = []
Available request formatters parse data from $request
and cookies from the $options
. The values
in $options['cookies']
must be an implementation of \GuzzleHttp\Cookie\CookieJarInterface
. To parse cookies, the
request URL must contain the domain.
Implementations of \Loguzz\Formatter\AbstractResponseFormatter::format
accept parameters as
\Psr\Http\Message\RequestInterface $request
\Psr\Http\Message\ResponseInterface $response
array $options = []
Available response formatters parse data from $response
and cookies from the set-cookie
header. To parse
cookies, the request URL must contain the domain.
The set-cookie
headers will not be available in the headers for available response formatters.
If you think something is missing in the package or cause bug, please report an Issue. If you're available and want to contribute to the repository, please submit a PR.