О логах в Python
Многие программисты используют print
для лечения багов, но в больших, серьёзных проектах так не получится:
- Во-первых, они обычно запущены на сервере, из-за чего до вывода
print
будет не добраться. А если программу перезапустить, то все сообщения пропадут и вовсе. - Во-вторых, чтобы сообщения были полезны, нужно выводить много всего: время, строку в коде, что случилось… Это всё очень засорит код ненужным мусором.
Просто не выводить такие сообщения — тоже плохо. Представьте, вы написали программу, запустили на сервере. Через год вам пишут, что ваша программа сломалась. И что же делать, где ошибка?
Помогут логи — журнал действий программы. По сути, это те же сообщения через print
, только за вас заранее реализовано много всего классного:
- Можно сортировать по степени важности, времени и т. д.
- Можно выводить не только в терминал. За вас уже реализован вывод в файл, например.
- Легко понять где, когда и что произошло.
Как пользоваться
Для ведения логов в Python есть библиотека logging
:
import logging
logging.debug('Сообщение для дебагинга')
logging.info('Произошло какое-то событие. Всё идёт по плану.')
logging.warning('Предупреждение, что-то могло сломаться')
logging.error('Ошибка, что-то сломалось')
logging.critical('МЫ В ОГНЕ ЧТО ДЕЛАТЬ?!?!')
Здесь мы создаём записи в логах на разных уровнях важности (от debug до critical). При таком использовании будет выглядеть почти как принты:
WARNING:root:Предупреждение, что-то могло сломаться
ERROR:root:Ошибка, что-то сломалось
CRITICAL:root:МЫ В ОГНЕ ЧТО ДЕЛАТЬ?!?!
Вопрос, куда делись первые 2 сообщения? Дело в том, что logging автоматически фильтрует для вас логи по степени важности DEBUG
, INFO
, WARNING
, ERROR
и CRITICAL
.
По умолчанию logging
фиксирует только логи уровня WARNING и выше (т.е. ещё ERROR и CRITICAL), а все логи уровнями ниже — игнорирует (DEBUG и INFO). Это можно изменить в настройках логов:
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug('Сообщение уровня DEBUG')
Теперь вы увидите все логи, на всех уровнях.
Уровни логирования
Рассмотрим каждый вариант отдельно.
DEBUG
DEBUG — это сообщения для отладки, которые вы оставили для себя. Содержимое переменных и всё такое. Самые не важные. Обычные пользователи их не читают, только программисты и системные администраторы.
INFO
INFO — это сообщения о происходящих событиях, не требующих реакции пользователя. Например: отправлено письмо, зарегистрирован пользователь.
WARNING
WARNING — предупреждения о том, что вскоре может привести к неожиданному поведению программы или же к ошибкам в работе модулей. Например: Файл настроек не найден, использую стандартные.
ERROR
ERROR — это такие ошибки, из-за которых приложение вынуждено завершить свою работу или теряет часть функциональности. Например, если чат-бот не может ответить одному из пользователей из-за ошибки, он может его проигнорировать и общаться с остальными.
CRITICAL
CRITICAL — самые серьезные ситуации, когда программа повреждена и простой перезапуск дело уже не исправит. Требуется немедленное вмешательство программиста или системного администратора. Пример такой ситуации — это повреждение базы данных в результате экстренного выключения сервера.
Что читать дальше?
Обращайтесь к нашим статьям:
К статьям с других сайтов:
Или к документации logging