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

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

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


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

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

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

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

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