Ответ
Уровни логирования в 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: Система не может продолжать работу!
Вот и вся магия, блядь. Настроил уровень — и не захлёбываешься в тоннах информационного мусора, а ловишь только реальные проблемы. Красота, ёпта!