Возможно, вы уже пользовались такими отчетами, в которых каждый запрос к сайту подробно логируется с тем, чтобы в дальнейшем найти определенный запрос и проверить его состояние.
Во фреймворке HLEB2 такой возможности изначально не предусмотрено, так как такие логи должны быть сознательно одобрены на проекте и их формат и включаемые данные должны быть составлены разработчиком. Дело в том, что при достаточно большом количестве такой подробной информации должна быть определенная стратегия, куда их направлять и как сортировать.
Средствами фреймворка реализовать такое очень просто. Достаточно сделать middleware и добавить его к группе, которая оборачивает необходимые для логирования запросов маршруты. Подробнее о контроллерах-посредниках в документации фреймворка. Если необходимо перехватить все запросы, то нужно обернуть группой все существующие маршруты и назначить данный middleware этой группе..
Класс middleware может быть таким:
<?php
// Файл app/Middlewares/HttpQueryLoggerMiddleware.php
declare(strict_types=1);
namespace App\Middlewares;
use Hleb\Base\Middleware;
use Hleb\Reference\Interface\Log;
use Hleb\Reference\Interface\Request;
class HttpQueryLoggerMiddleware extends Middleware
{
public function index(Request $request, Log $logger): void
{
$data = [
'url' => $request->getAddress() . $request->getUri()->getQuery(),
'method' => $request->getMethod(),
// Другие необходимые в логе параметры.
];
$logger->info('Request log for the site, url: {url} method: {method}', $data);
}
}
Ещё одним вариантом может быть использование KernelEvent. Создайте файл со следующим содержимым:
<?php
// Файл /app/Bootstrap/Events/KernelEvent.php
declare(strict_types=1);
namespace App\Bootstrap\Events;
use Hleb\Base\Event;
use Hleb\Reference\Interface\Log;
use Hleb\Reference\Interface\Request;
class KernelEvent extends Event
{
public function __construct(
private readonly Log $log,
private readonly Request $request,
)
{
}
public function before(): bool
{
$data = [
'url' => $this->request->getAddress() . $this->request->getUri()->getQuery(),
'method' => $this->request->getMethod(),
// Другие необходимые в логе параметры.
];
$this->log->info('Request log for the site, url: {url} method: {method}', $data);
return true;
}
}