Уровни исключений и логирование

134
16 ноября 2020, 10:20

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

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

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

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

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

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

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

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

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

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

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

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

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

Буду благодарен за любую помощь.

Answer 1

Я логирую исключения с помощью ErrorHandler. Для установки уровня логирования я наследовал \Exception и добавил в него метод, возвращающий LogLevel.

Желательно создать интерфейс, а внутри обработчика ошибок проверять исключение на соответствие интерфейсу. Если подходит, получать уровень с помощью метода, если не подходит - ставить ERROR

class WarningException extends \Exception
{
    public function getLogLevel()
    {
        return LogLevel::ERROR;
    }
}
READ ALSO
Передача массива в Twig

Передача массива в Twig

Имеется многомерный массив $categories_arr:

125
многопользовательский сценарий

многопользовательский сценарий

есть блок кода (назовем его $foo->bar() ) который должен выполнится один раз и только один разкак это организовать в многопользовальском сценарии?

86
Платежная система и запись в БД?

Платежная система и запись в БД?

Использую ОктябрьСоздана страница заказа, где собирается вся информация

154
Ошибки при постоянном соединении - MySQL server has gone away

Ошибки при постоянном соединении - MySQL server has gone away

После того, как устанавливаю параметр p: при коннекте к БД, в nginx error логах начинают вылетать ошибкиКак понял, данные ошибки возникают когда...

101