@kirill-93

Как правильно организовать код в таком случае?

Здравствуйте! Мне нужно покрыть проект логами. В некоторых участках кода нужно делать запись данных в базу. Я выделил несколько сущностей, которые мне нужно логировать:
1. Запрос пользователя
2. Ответ сервера пользователю
3. Исключения
4. Ответы платежной системы
Наверное еще что-нибудь нужно будет логировать потом, но пока так.
Я решил делать так:
interface LoggerInterface
{
    public function log($data);
}

class RequestLogger implements LoggerInterface
{
    public function log($request)
    {
        $activeRecord->insert(
            'request_id' => $request->id,
            'headers' => $request->headers,
            //...
         );
    }
}

class ResponseLogger implements LoggerInterface
{
    public function log($request, $response)
    {
        $activeRecord->insert(
            'request_id' => $request->id,
            'headers' => $response->headers,
            //...
         );
    }
}

class ExceptionLogger implements LoggerInterface
{
    public function log($exception)
    {
        $activeRecord->insert(
            'message' => $exception->getLine() . ' ' . $exception->getMessage(),
            //...
         );
    }
}

class CloudPaymentsLogger implements LoggerInterface
{
    public function log($data)
    {
        $activeRecord->insert(
            'status' => $data->status,
            'data' => $data->message,
            //...
         );
    }
}


Теперь я оборачиваю нужные мне роуты в middleware, вызываю там RequestLogger и ResponseLogger, а внутри кода логгирую данные, которые приходят от платежной системы с помощью CloudPaymentsLogger, а исключения, которые падают в catch, ловлю с помощью ExceptionLogger.
Я чувствую, что делаю какую-то ересь и все это неправильно. Во-первых, ResponseLogger принимает 2 аргумента, а все остальные классы один. Во-вторых, почему-то PhpStorm ругается, что имя аргумента в интерфейсе и классах разное. В третьих, все эти классы различаются лишь тем, как они обрабатывают данные. Наверное можно сделать один класс и ему передавать форматированные данные.
Подскажите, пожалуйста, как правильно?
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
delphinpro
@delphinpro Куратор тега PHP
frontend developer
В общем, если вам нужно прикрутить логирование, просто установите себе пакет https://github.com/php-fig/log
И не отвлекайтесь на изобретение велосипеда. Займитесь действительно полезной работой - покрытием логами.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы