Что такое уровни логирования в Python и в чем их различие

Ответ

Уровни логирования в Python — это стандартизированные категории для классификации сообщений по степени их важности. Использование уровней позволяет гибко настраивать, какая информация будет записываться в лог, отфильтровывая менее значимые сообщения в production-среде.

Стандартный модуль logging определяет 5 основных уровней, расположенных по возрастанию приоритета:

  • DEBUG (10): Детальная информация, полезная только для диагностики проблем. Например, значения переменных, состояние системы в конкретный момент.
  • INFO (20): Информационные сообщения, подтверждающие, что приложение работает в штатном режиме. Например, запуск сервиса, успешное выполнение плановой задачи.
  • WARNING (30): Предупреждения о непредвиденных ситуациях, которые пока не являются ошибками, но могут ими стать. Например, использование устаревшего API, низкое место на диске.
  • ERROR (40): Сообщения о серьезных ошибках, из-за которых часть функциональности не может быть выполнена, но приложение продолжает работать. Например, невозможность подключиться к второстепенному сервису.
  • CRITICAL (50): Критические ошибки, которые приводят к аварийному завершению работы программы. Например, невозможность подключения к базе данных при старте.

Принцип работы:

Логгер будет обрабатывать только те сообщения, уровень которых равен или выше установленного для него порога.

import logging

# Устанавливаем минимальный уровень WARNING.
# Сообщения DEBUG и INFO будут проигнорированы.
logging.basicConfig(level=logging.WARNING, format='%(levelname)s: %(message)s')

logging.debug("Это сообщение не будет выведено")
logging.info("И это тоже не будет")
logging.warning("Обнаружена потенциальная проблема.")
logging.error("Произошла ошибка при обработке запроса.")
logging.critical("Система не может продолжать работу!")

Вывод программы:

WARNING: Обнаружена потенциальная проблема.
ERROR: Произошла ошибка при обработке запроса.
CRITICAL: Система не может продолжать работу!

Ответ 18+ 🔞

Давайте разберёмся с этими вашими уровнями логирования, а то как будто в кино про шпионов попали — там тоже всё по уровням секретности. Только тут не «совершенно секретно», а «дебаг» и «критикл», блядь.

Вот представь: твоя программа — это такой многоэтажный дом, а логи — это жильцы, которые орут из окон. Кто-то просто бубнит себе под нос (дебаг), кто-то нормально так заявляет (инфо), а кто-то уже орёт, что потолок протекает (ворнинг), ну а кто-то вообще паникует, что дом горит (еррор) или уже рушится (критикл). Так вот, ты как главный по дому настраиваешь уши — с какого этажа крики начинать слушать. Поставил уровень на «ворнинг» — всё, что тише, тебя не ебёт. Сидишь, кофе пьёшь, а тут бац: «ой, предупреждение!» — и ты уже в деле.

Стандартных уровней, мать их, пять штук. Идут по нарастающей, как градусник перед болезнью:

  • DEBUG (10) — Это когда программа шепчет тебе на ушко всякую хуйню: «смотри, переменная x сейчас равна 42, а я только что вошла в функцию parse_shit». Нужно только когда ты ковыряешься в коде, как хирург в кишках. В продакшене это как слушать, как трава растёт — нихуя не нужно и только мешает.
  • INFO (20) — Уже нормальные, адекватные сообщения. «Сервис стартанул», «Пользователь Вася залогинился», «Задача №666 выполнена успешно». Для спокойной жизни, чтобы знать, что всё идёт по плану и не пиздец.
  • WARNING (30) — Тут уже начинается: «Э, дружок-пирожок, что-то идёт не так, но пока живы». Место на диске кончается, кто-то использует старый метод, который скоро отключат, сеть чуть подтормаживает. Не ошибка ещё, но уже повод ебучу поднять.
  • ERROR (40) — Вот тут уже конкретный пиздец случился, но локальный. Не смог отправить письмо, упало подключение к платежке, не нашёл файл конфига. Программа в целом жива, но кусок функционала — в ауте. Надо срочно разбираться, но не бежать с огнетушителем.
  • CRITICAL (50) — А это уже полный, окончательный, бесповоротный пиздец. База данных легла, без которой ни шагу. Диск отвалился. Ядро системы сдохло. Всё, концерт окончен, программа падает с дикими судорогами. После такого логи — это предсмертная записка.

Как это, блядь, работает? Всё просто, как три копейки. Ты логгеру говоришь: «Слушай, чувак, меня всё, что ниже вот этого уровня — не ебёт». Он тебе и фильтрует. Поставил порог на WARNING — получишь ворнинги, ерроры и критикалы. А всю мелкую болтовню про дебаг и инфо — выкинет нахуй, даже не моргнув.

Смотри, как это в коде выглядит, ёпта:

import logging

# Говорим логгеру: "Дружище, меня волнуют только проблемы уровня WARNING и выше.
# Всё остальное — фоновый шум, нахуй не нужный".
logging.basicConfig(level=logging.WARNING, format='%(levelname)s: %(message)s')

# Эту фигню он проигнорит. Типа "дебажу, никому не интересно".
logging.debug("Это сообщение не будет выведено")
# И эту тоже. "Всё ок" — это не новость.
logging.info("И это тоже не будет")
# А вот тут уже зашевелился. Предупреждение же!
logging.warning("Обнаружена потенциальная проблема.")
# Опа, ошибка! Тревога!
logging.error("Произошла ошибка при обработке запроса.")
# Ну всё, пизда. Критическая ситуация.
logging.critical("Система не может продолжать работу!")

И на выходе получишь только то, что действительно стоит внимания:

WARNING: Обнаружена потенциальная проблема.
ERROR: Произошла ошибка при обработке запроса.
CRITICAL: Система не может продолжать работу!

Вот и вся магия, блядь. Настроил уровень — и не захлёбываешься в тоннах информационного мусора, а ловишь только реальные проблемы. Красота, ёпта!