Додаємо контекст запиту в додатках Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 25 грудня, 2024
Вам цікаво дізнатися, як підвищити ефективність налагодження у Laravel? У нашій статті розглядається, як використання фасаду Context дозволяє додавати важливу метаінформацію до ваших логів, що спрощує процес моніторингу та аналізу запитів

Фасад 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 збагачує логування у вашому додатку важливими метаданими, які зберігаються протягом усього життєвого циклу запиту, роблячи налагодження та моніторинг більш ефективними