Python:
Журналирование
Как:
Python поставляется с встроенным модулем для логирования. Вот базовая настройка:
import logging
# Базовая конфигурация логирования
logging.basicConfig(level=logging.INFO)
# Сообщения логирования
logging.debug('Это сообщение отладки')
logging.info('Информация о том, что только что сделала ваша программа')
logging.warning('Предупреждающее сообщение')
logging.error('Произошла ошибка')
logging.critical('Программа не может восстановиться!')
Когда вы запустите этот код, вы увидите следующий вывод (поскольку уровень по умолчанию - WARNING, сообщения debug и info показаны не будут):
WARNING:root:Предупреждающее сообщение
ERROR:root:Произошла ошибка
CRITICAL:root:Программа не может восстановиться!
Вы также можете настроить логирование для записи в файл вместо консоли:
logging.basicConfig(filename='app.log', filemode='w', level=logging.INFO)
Теперь ваши логи будут направлены в файл ‘app.log’.
Глубокое погружение
Логирование существует с первых дней программирования, причем системные логи являются одной из самых старых форм постоянного хранения данных вне фактических файлов с данными. История в сторону, основная концепция логирования по существу осталась неизменной, хотя инструменты эволюционировали.
Модуль logging
в Python достаточно мощный и гибкий. Он позволяет программистам устанавливать различные уровни логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL), которые могут помочь в категоризации и фильтрации логов. В нем реализована иерархическая система логгеров, что означает, что вы можете иметь отношения родитель-потомок между логгерами и распространять сообщения по цепочке.
Альтернативы включают сторонние библиотеки, такие как Loguru или structlog, которые предлагают расширенные возможности и более простой интерфейс, чем встроенный модуль логирования. Они могут обеспечивать более красивый вывод, лучшую сериализацию структурированных данных и более интуитивные способы работы с конфигурацией логов.
Что касается реализации, при настройке логирования важно сделать это один раз в начале вашего приложения. Рекомендуется настраивать его на уровне модуля, используя logging.getLogger(__name__)
, чтобы следовать лучшим практикам логирования в Python.
Логирование не должно существенно влиять на производительность приложения в обычных условиях. Однако следует быть осторожным с тем, что логируется: чрезмерно подробное логирование, особенно на уровне DEBUG, может замедлить приложение и быстро заполнить хранилище файлов логов.
См. также
Для получения дополнительной информации о модуле логирования Python, ознакомьтесь с официальным кулинарным справочником Python по логированию для получения отличных примеров и лучших практик: https://docs.python.org/3/howto/logging-cookbook.html
Для глубокого погружения в структурированное логирование и понимания того, как оно может помочь сделать логи более информативными и легкими для анализа, Loguru хорошо задокументирован: https://loguru.readthedocs.io
Также рассмотрите методологию 12-факторного приложения, в частности раздел о логах для современного взгляда на логирование приложений: https://12factor.net/logs