[PSR-3, monolog] Как правильно построить систему логирования, журналирования и вывода ошибок на сайте?

Начну с того, что про стандарт PSR-3 и библиотеку monolog я знаю. Проект сам достаточно большой, так что, думаю, эта библиотека хорошо подойдёт. Но некоторые моменты всё равно не понятны.

Например, взять регистрацию/авторизацию (или другую обработку пользовательских данных). Раньше все ошибки ввода (например ошибки валидации) записывались в суперглобальный массив $_SESSION, далее делался редирект на ту же страницу для очистки POST данных (что бы по F5 нельзя было отправить форму ещё раз), потом выводили ошибки в шаблон и очищали сессию, что бы ошибки не маячили всё время. Сейчас начал обращать внимание, что в некоторых статьях/видео/книгах подобного рода ошибки засовывают в исключения, а юзеру просто показываются текст из этого исключения.
  • Нормальная ли эта практика?
  • Как в этом подходе обстоят дела с очисткой формы от POST?
  • Подходит ли именно для этой задачи библиотека monolog или она только для журналирования, но не предназначена для вывода ошибок юзерам?
  • Небольшое отступление в вопросе, но ещё в разных местах пишут/говорят по разному о том в каком месте валидировать данные: контроллер, модель или отдельный компонент?
  • Если в контроллере валидировать данные, то где их тогда перехватывать в случае исключений? Я так предполагаю, что это лучше делать в отдельном компоненте, а перехватывать уже в контроллере?


Так же интересует практика журналирования ошибок/нестандартных ситуаций/и других простых событий в проекте. Тут понятно, что monolog, вроде как, подходит, но не совсем ясно, как это надо совмещать с механизмом исключений? Могу предположить, что при возможной ошибке бросается исключение и ниже эта же ошибка логируется через библиотеку? Или тут должен быть другой механизм?

Ну и последний вопрос, который, наверное, относится к категории личных практик. Как вы вообще организуете логирование на вашем сайте/проекте? То есть какие ошибки пишите в логи, какие по email, может ещё используете какие-то способы доставки. Если у вас идёт запись в лог файлы, то какую структуру каталогов и самого лог файла делаете в зависимости от типа ошибки/сообщения? Тут интересуют именно лучшие практики.

Спасибо за внимание.
  • Вопрос задан
  • 605 просмотров
Пригласить эксперта
Ответы на вопрос 1
dmitriylanets
@dmitriylanets
веб-разработчик
1. исключение выбрасывается при не запланированном поведении, как правило всю работу приложения вкладываем в try catch и:
```
try{
$aplication->start();
}
catch(Exception $e){
$logger->error($e->getMessage());
return new Response("Ошибка в работе приложения")
}
```
как правило в лог складываем информацию на продакшене, в девелоп версии можно выкидывать все на экран.
Также в функционале можно логировать полезную информацию $logger->debug(), $logger->info() и тд
уровень логирования задается при инициализации приложения
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 15:45
10000 руб./за проект
23 апр. 2024, в 15:42
5000 руб./за проект
23 апр. 2024, в 15:34
10000 руб./за проект