Фасад Context у Laravel покращує аналіз роботи додатка, дозволяючи додавати постійні метадані протягом усього життєвого циклу запиту. Цей контекст автоматично збагачує ваші лог-файли цінною інформацією для налагодження.
<?php
use Illuminate\Support\Facades\Context;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
class RequestContext
{
public function __construct()
{
Context::add('request_id', Str::uuid()->toString());
}
public function addUserContext()
{
if (Auth::check()) {
Context::add('user_id', Auth::id());
Context::add('user_type', Auth::user()->type);
}
}
public function logAction(string $action)
{
Log::info("Користувач виконав {$action}");
}
}
Розглянемо практичний приклад використання контексту запиту в middleware та логуванні API-запитів:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Context;
use Illuminate\Support\Str;
class ApiRequestLogger
{
public function handle(Request $request, Closure $next)
{
// Додати основний контекст запиту
Context::add('request_id', Str::uuid()->toString());
Context::add('path', $request->path());
Context::add('method', $request->method());
// Додати контекст користувача, якщо він аутентифікований
if ($request->user()) {
Context::add('user_id', $request->user()->id);
Context::add('api_key', $request->user()->api_key);
}
// Додати показники продуктивності
$startTime = microtime(true);
$response = $next($request);
Context::add('response_time', round((microtime(true) - $startTime) * 1000, 2));
Context::add('status_code', $response->getStatusCode());
// Логування API запиту
Log::info('API запит оброблено');
return $response;
}
}
Фасад Context збагачує логування у вашому додатку важливими метаданими, які зберігаються протягом усього життєвого циклу запиту, роблячи налагодження та моніторинг більш ефективними