О логах в 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


Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.