Ответ
Стандартная библиотека logging в Python — это мощный и гибкий инструмент для управления логами приложения. Она позволяет настраивать уровни логирования, форматы сообщений, обработчики (handlers) и фильтры.
Почему это важно: Правильное логирование критически важно для отладки, мониторинга и анализа поведения приложения в различных средах, помогая быстро выявлять и устранять проблемы.
Базовая настройка:
Для быстрой настройки можно использовать logging.basicConfig(), который конфигурирует корневой логгер.
import logging
# Базовая настройка логирования
logging.basicConfig(
level=logging.INFO, # Уровень логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL)
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # Формат сообщения
handlers=[
logging.FileHandler('app.log', encoding='utf-8'), # Запись в файл
logging.StreamHandler() # Вывод в консоль
]
)
logger = logging.getLogger(__name__) # Получение логгера для текущего модуля
logger.info("Это информационное сообщение.")
logger.warning("Это предупреждение.")
Расширенные возможности:
- Множественные логгеры: Создание отдельных логгеров для разных модулей или компонентов с индивидуальными настройками.
- Ротация логов: Использование
RotatingFileHandlerилиTimedRotatingFileHandlerдля автоматической ротации лог-файлов по размеру или времени. - Фильтры: Добавление кастомных фильтров для выборочной обработки лог-записей.
- Кастомные обработчики: Интеграция с внешними системами мониторинга (например, Sentry, ELK Stack) через специализированные обработчики.
Рекомендации:
Всегда выбирайте адекватные уровни логирования. Избегайте избыточного логирования DEBUG уровня в продакшене, чтобы не перегружать систему и не раскрывать конфиденциальные данные.
Ответ 18+ 🔞
Да ты посмотри, что за зверь этот logging в Python, а? Это ж не просто хуй собачий какой-то print(), который набросал и забыл. Это целая ебучка, чтобы твоё приложение не превратилось в чёрный ящик, из которого только и светится, что "Something went wrong, lol".
А нахуя оно вообще надо? Представь, твоя прога в продакшене накрылась медным тазом. А ты сидишь и гадаешь: "Ну что, блядь, случилось-то?". А если бы ты настроил логирование, как человек, ты бы уже видел, где конкретно эта мартышлюшка споткнулась. Отладка, мониторинг, анализ — без логов ты просто слепой кот в тёмной комнате.
Самый простой способ, чтоб не ебаться:
Есть функция basicConfig(). Она для тех, кто не хочет заморачиваться, но хочет уже хоть что-то.
import logging
# Вот так, внатуре, быстро и сердито
logging.basicConfig(
level=logging.INFO, # Ловить всё от INFO и выше. DEBUG в продакшене — это пиздец, а не логи.
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # Чтоб красиво было, а не абракадабра
handlers=[
logging.FileHandler('app.log', encoding='utf-8'), # Пишем в файлик
logging.StreamHandler() # И дублируем в консоль, для пафоса
]
)
logger = logging.getLogger(__name__) # Берём логгер для этого модуля
logger.info("Приложение стартануло, ура.")
logger.warning("А тут что-то подозрительно, насторожи жопу.")
А если хочется поизвращаться? О, тут просто овердохуища возможностей открывается!
- Куча логгеров: Можно наделать отдельных логгеров для каждой части приложения. Чтоб логи от базы данных не мешались с логикой от расчёта кредита.
- Ротация, блядь: Представляешь, лог-файл на 500 гигов?
RotatingFileHandlerилиTimedRotatingFileHandler— твои лучшие друзья. Они сами порежут файлы по размеру или времени. - Фильтры: Хочешь, чтобы в лог не попадали сообщения от какого-нибудь надоедливого модуля? Фильтр ему в сраку!
- Отправка куда угодно: В Sentry, в ELK, в телеграм-боту, в мозг админу — пиши свой обработчик и впердоливай логи куда душе угодно.
Главный совет, чтоб не обосраться:
Не логгируй всё подряд на уровне DEBUG в продакшене. Это как кричать "ЁБАНО!" на каждом шагу — скоро все перестанут обращать внимание, а диск забьётся хуй пойми чем. Да и пароли/токены случайно в лог не выведи, а то будет волнение ебать.