Looking to hire Laravel developers? Try LaraJobs

laravel-correlation-id maintained by philiprehberger

Description
Laravel middleware that generates or propagates correlation IDs for request tracing with automatic log context injection
Last update
2026/04/12 05:41 (dev-main)
License
Downloads
53

Comments
comments powered by Disqus

Laravel Correlation ID

Tests Latest Version on Packagist License

Laravel middleware that generates or propagates correlation IDs for request tracing with automatic log context injection.

Requirements

  • PHP 8.2+
  • Laravel 11 or 12

Installation

composer require philiprehberger/laravel-correlation-id

Laravel's auto-discovery registers the service provider automatically.

Publish the config (optional)

php artisan vendor:publish --tag=correlation-id-config

This copies config/correlation-id.php into your application so you can customise it.

Usage

Register the Middleware

Add the middleware to your HTTP kernel in bootstrap/app.php:

use PhilipRehberger\CorrelationId\AddCorrelationId;

->withMiddleware(function (Middleware $middleware) {
    $middleware->prepend(AddCorrelationId::class);
})

Accessing the Correlation ID

// From the request object
$correlationId = $request->attributes->get('correlation_id');

// Via the helper class
use PhilipRehberger\CorrelationId\CorrelationId;

$id = CorrelationId::get();
CorrelationId::set('my-custom-id');

Configuration

// config/correlation-id.php
return [
    'request_headers' => ['X-Request-Id', 'X-Correlation-ID'],
    'response_header' => 'X-Request-Id',
    'log_context_key' => 'correlation_id',
    'sentry'          => true,
];

How It Works

  1. The middleware inspects incoming request headers in the order defined by request_headers.
  2. The first non-empty value found is used as-is (propagation path).
  3. When no matching header is present, a new UUID v4 is generated.
  4. The ID is stored as a request attribute and shared with the log context.
  5. After the handler returns, the ID is written to the response header defined by response_header.

Sentry Integration

When sentry/sentry-laravel is installed and 'sentry' => true, the middleware sets correlation_id as a tag on every Sentry event captured during the request.

API

Class / Method Description
AddCorrelationId middleware Generates or propagates the correlation ID and injects it into logs and responses
CorrelationId::get() Read the current correlation ID (null if not yet set)
CorrelationId::set(string $id) Override the correlation ID (useful in tests or CLI commands)
$request->attributes->get('correlation_id') Read the ID from the current request
X-Request-Id response header Outgoing header carrying the correlation ID (configurable)
correlation_id log context key Key injected into every Log::* call during the request (configurable)

Development

composer install
vendor/bin/phpunit
vendor/bin/pint --test
vendor/bin/phpstan analyse

License

MIT