@topuserman

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

Мне нужно разработать систему интеграции с различными информационными системами.

В процессе разработки будут случаи, когда в непредвиденных ситуациях требуется отправлять уведомления по почте, в других случаях записывать информацию в журнал или отправлять SMS в критических ситуациях.

Для логирования и других уведомлений я выбрал Monolog (только знакомлюсь с монологом).

Вопрос в том, как мне организовать работу Exception, так, чтобы существовали разные уровни исключений и выполнялись соответствующие действия (запись логов в журнал и т. Д.)?

Я искал информацию в разных источниках, нашел несколько статей о работе с исключениями (статья на habr).

UnloggedInterface - этим интерфейсом помечаются эксепшены, которые не надо логировать вообще.

PreloggedInterface - этим интерфейсом помечаются эксепшены, которые необходимо логировать в любом случае: неважно, обработаны они или нет.

OutableInterface - этот интерфейс помечает эксепшены, текст которых можно выдавать пользователю: далеко не каждый эксепшн можно вывести пользователю.

Я не понимаю, какой должна быть иерархия наследования Exception классов? Каким образом нужно связать Monolog (или любую другую систему логирования) с классами исключений ?

Может нужно использовать Monolog\ErrorHandler ? (но я не знаю как) ..

Подскажите пожалуйста, где я могу посмотреть примеры? Или где почитать об этом подробнее?

Я хотел бы понять, как это работает. И посмотрите примеры правильной работы с исключениями и логами.

Можно даже примеры на GitHub))

Буду благодарен за любую помощь.
  • Вопрос задан
  • 239 просмотров
Пригласить эксперта
Ответы на вопрос 1
dmitriylanets
@dmitriylanets
веб-разработчик
Основная ошибка проектировать исключения с учётом как их будут использовать, использование исключений это задача кода приложения, код приложения может быть разный, может меняться например
Сервис пользователя UserService имеет метод получения пользователя по id на выходе только UserEntity если по каким то причинам нет пользователя то кидани UserNotFoundException
Теперь приложение варианты использования:
1. Для рест апи в контроллере сделаем запрос на получение пользователя и обработав исключение там же отправим ответ 404, отсутствие пользователя не так критично.
2. Есть форма сохранения например товара или заказа, и нужно получит информацию о пользователе по его сессионной id, делаем запрос а пользователя нет, обрабатываем исключение например глобальным обработчиком приложения и логируем, выдаём пользователю уведомление о сбое, вот тут критично. 500 ответ
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы