dittto/symfony-request-logger
Installation:
composer require dittto/symfony-request-logger
(Note: This package is Symfony-focused, but Laravel can adapt it via middleware or service providers.)
Basic Configuration:
config/app.php under providers:
Dittto\RequestLogger\RequestLoggerServiceProvider::class,
AppServiceProvider@boot():
$this->app->singleton('http_client.handlerstack', function () {
$stack = HandlerStack::create();
$stack->push(new \Dittto\RequestLogger\Middleware\RequestLoggerMiddleware());
return $stack;
});
First Use Case:
use GuzzleHttp\Client;
public function fetchExternalData(Client $client) {
$response = $client->get('https://api.example.com/data');
// Logs will auto-capture timing, status, and payload.
}
APP_DEBUG=true) to see JSON logs appended to responses.Middleware Integration:
Http::withOptions(['handler' => $stack]) for custom clients.Log Output:
dittto_request_logger config).X-Request-Logs).Conditional Logging:
$stack->push(new RequestLoggerMiddleware(), 'priority', function ($request) {
return !str_contains($request->getUri(), ['/payments', '/tokens']);
});
Performance Monitoring:
X-Request-ID headers.Client with Laravel’s Http facade (v8+):
$stack = HandlerStack::create();
$stack->push(new RequestLoggerMiddleware());
$client = new Client(['handler' => $stack]);
Http::macro('withLogger', fn () => Http::withOptions(['handler' => $stack]));
if ($response->getStatusCode() >= 400) {
dispatch(new LogFailedRequest($request, $response));
}
Debug Mode Dependency:
Payload Size Limits:
max_body_size in the middleware:
# config/packages/dittto_request_logger.yaml
dittto_request_logger:
max_body_size: 1024 # bytes
Middleware Order:
RequestLoggerMiddleware after auth/retries but before error handlers to capture full request/response cycles.Symfony-Specific Assumptions:
Request object. In Laravel, adapt the middleware to use Psr\Http\Message\RequestInterface:
use Psr\Http\Message\RequestInterface;
$request = $this->getRequest(); // Laravel's Request or Psr7 Request.
request_logger channel for raw data:
\Log::channel('request_logger')->debug('Custom log');
tap to the middleware to inspect requests:
$stack->push(new RequestLoggerMiddleware(), 'debug', function ($request) {
\Log::debug('Request:', [$request->getUri(), $request->getHeaders()]);
});
Custom Log Fields:
logRequest method to add metadata (e.g., user ID):
$logger->logRequest($request, $response, ['user_id' => auth()->id()]);
Slack/Alerting:
request_logger Monolog channel to trigger alerts:
\Log::extend('slack', function () {
return new SlackHandler('webhook_url');
});
Laravel Horizon:
dispatch(new ProcessRequestLog($logData));
How can I help you explore Laravel packages today?