Пишем своего робота на Python. Урок 8
Учимся записывать ход работы робота, чтобы отслеживать ошибки, возникающие в наше отсутствие
Мы продолжаем писать робота, который собирает госконтракты и отправляет выборку на почту. Из прошлого выпуска вы узнали, как на этапе написания программы получить сообщение о том, что что-то в нашем коде пошло не так. Но давайте представим ситуацию, когда наш робот уже дописан и каждую неделю присылает нам на почту письмо с собранными контрактами. И вдруг в положенный день письмо не приходит – что-то сломалось. При этом, мы не можем круглосуточно дежурить у компьютера и следить за тем, как выполняется код и в каком месте возникла ошибка. В таких случаях спасает логирование.
Логирование похоже на запись хода выполнения программы в журнал. Информация из него будет полезна для понимания того, что происходило с программой, когда нас не было рядом, и исправления проблем. Сегодня мы создадим такой лог-файл для нашего робота, но для начала рассмотрим принцип работы логирования на простом примере. Для этого создам чистый файл – logs.py. Импортируем библиотеку logging. Потом создадим простую конструкцию: напишем, что мы хотим сохранить логи в файл, дадим ему название и установим уровень логирования.
Есть несколько уровней логирования, здесь они перечислены в порядке возрастания значимости. Обычно чем больше информации в логах, тем легче понять, что случилось, но когда ее слишком много, разобраться бывает сложно. Поэтому придуманы разные уровни логирования в зависимости от того, насколько значимую информацию мы хотим сохранять. По умолчанию этот уровень WARNING – то есть в логах будут отображаться все сообщения этого уровня и выше (WARNING, ERROR, CRITICAL). Но его можно поменять, указав нужный в параметре level – давайте установим DEBUG – тогда будет записываться информация всех уровней.
- DEBUG – подробное и детальное логирование всей системной информации для последующего использования в отладке;
- INFO – подтверждение, информация о событиях, не приводящих к ошибкам в работе м одулей;
- WARNING – информация о событиях, которые могут привести к ошибкам в работе модулей;
- ERROR – информация об ошибках, возникших в работе модулей;
- CRITICAL – информация о критических ошибках, возникших в работе модулей.
После этого для примера напишем простой код с делением на 0: попробуй разделить 10 на 0, а если не получится, если возникнет какая-то ошибка, выведи нам в файл сообщение об этой ошибке.
Выполним этот код, и теперь у нас на компьютере появился простой файл, в котором содержится следующая информация: уровень сообщения (ERROR) и суть этой ошибки (деление на 0).
Если мы хотим увидеть подробности, можно вместо error написать exception. Вот как в этом случае изменится информация в лог-файле.
Регистрировать можно не только ошибки, но и удачные сценарии. Давайте разделим 10 на 10 и попросим напечатать в лог-файл результат. В этом случае мы используем не error или exception, а info. Устанавливать эти уровни в коде важно, чтобы потом не запутаться, в каком случаем это была ошибка, в каком просто информация.