@topuserman

Как архитектурно решать такую проблему (логирование в процессе ошибки)?

У меня есть метод, который выполняет http-запрос к стороннему сервису.
Этот метод из внешней библиотеки, который технически нет возможности допилить.

И бывает так, что http-запрос выбрасывает php-ошибку (не exception).

И мне необходимо в моем клиенте сделать логирование всех запросов.

Например:

$response = $http_client->get($request);
$logger->debug([$request, $response]);


Но если возникнет ошибка, то в лог ничего не добавится. Хотелось бы в таких случаях, чтобы в лог был добавлен только $request.

Но два раза в лог писать нельзя (так нужно).

Как можно решить такую проблему?)
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
@neol
И бывает так, что http-запрос выбрасывает php-ошибку (не exception).

Начиная с PHP 7 ошибки тоже выбрасывают исключения, но не типа Exception, а типа Error. И вы их можете точно так же обрабатывать через try … catch.

Если нужно ловить нужно и ошибки, и исключения, то это можно сделать интерфейс Throwable, от которого наследуются Exception и Error.

Соответственно у вас будет что-то типа

try {
  $response = $http_client->get($request);
  $logger->debug([$request, $response]);
} catch (\Throwable $e) {
  $logger->debug([$request]);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Комментировать
Ваш ответ на вопрос

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

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