0Pricing
Python Academy · Урок

Основы модуля logging

Настраивайте средства ведения журнала, задавайте уровни и корректно выводите сообщения.

«Основы модуля logging» — бесплатный урок Python Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Почему журналирование лучше print

Модуль logging предоставляет уровни важности, настраиваемые назначения вывода, временные метки и возможность отключать вывод без изменения кода.

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")

Уровни журналирования

Python определяет пять стандартных уровней в порядке возрастания важности: DEBUG, INFO, WARNING, ERROR, CRITICAL. Выводятся только сообщения с уровнем не ниже настроенного.

import logging
# Numeric values:
# DEBUG    = 10
# INFO     = 20
# WARNING  = 30
# ERROR    = 40
# CRITICAL = 50

logging.basicConfig(level=logging.WARNING)
logging.debug("hidden")   # not shown
logging.warning("shown")  # shown

Получение регистратора

Используйте logging.getLogger(__name__) в каждом модуле. Это создаёт иерархию, соответствующую структуре модулей.

import logging

logger = logging.getLogger(__name__)

def process(data):
    logger.info("Processing %d items", len(data))
    return [x * 2 for x in data]

Параметры basicConfig

basicConfig быстро настраивает корневой регистратор. Распространённые именованные аргументы: level, format, filename, filemode.

import logging

logging.basicConfig(
    level=logging.DEBUG,
    format="%(asctime)s %(levelname)s %(name)s — %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S",
)

Поля формата журнала

Основные поля формата: %(levelname)s, %(name)s, %(message)s, %(asctime)s, %(filename)s, %(lineno)d.

import logging

fmt = "%(asctime)s | %(levelname)-8s | %(name)s:%(lineno)d | %(message)s"
logging.basicConfig(level=logging.DEBUG, format=fmt)
logging.info("Server started on port 8080")

Журналирование исключений

Используйте logger.exception() внутри блока except, чтобы записать сообщение AND полную трассировку стека.

import logging
logger = logging.getLogger(__name__)

try:
    1 / 0
except ZeroDivisionError:
    logger.exception("Division failed")
    # Logs message + traceback automatically

Дополнительный контекст с extra=

Передайте словарь в extra=, чтобы добавить пользовательские поля в запись журнала.

import logging
logger = logging.getLogger(__name__)

logging.basicConfig(
    format="%(asctime)s %(levelname)s [%(user)s] %(message)s"
)
logger.info("Login successful", extra={"user": "alice"})

Отложенное форматирование строк

Передавайте аргументы формата отдельно — не форматируйте строки заранее. Это позволяет избежать затрат на создание строки, если сообщение отфильтровано.

import logging
logger = logging.getLogger(__name__)

# BAD (always builds the string):
logger.debug(f"Processing {len(data)} items")

# GOOD (only builds if DEBUG is enabled):
logger.debug("Processing %d items", len(data))

Отключение журналирования

Вызовите logging.disable(level), чтобы глобально подавить все сообщения до указанного уровня включительно — это полезно в тестах.

import logging

logging.disable(logging.CRITICAL)  # suppress everything
# All log calls now silently do nothing

logging.disable(logging.NOTSET)    # re-enable

Иерархия регистраторов

Имена регистраторов используют точки как разделители. Дочерние регистраторы передают записи родительским, если propagate=False не установлено.

import logging

parent = logging.getLogger("myapp")
child = logging.getLogger("myapp.database")

# child propagates to parent by default
child.warning("DB slow")  # also appears in myapp's handlers

Корневой регистратор

Корневой регистратор (из logging.warning() и т. д.) является предком всех регистраторов. Настройте его с помощью basicConfig или добавьте обработчики напрямую.

import logging

root = logging.getLogger()  # root logger
root.setLevel(logging.DEBUG)

handler = logging.StreamHandler()
root.addHandler(handler)

Проверка

Какой метод журналирования следует использовать внутри блока except, чтобы автоматически включить полную трассировку стека?

Итоги

Используйте именованные регистраторы с getLogger(__name__), настраивайте их через basicConfig, передавайте аргументы формата отложенно, а для трассировок ошибок используйте logger.exception(). Регистраторы образуют иерархию с корневым регистратором во главе.

Часто задаваемые вопросы

Урок «Основы модуля logging» бесплатный?

Да — полный текст урока «Основы модуля logging» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Основы модуля logging»?

Настраивайте средства ведения журнала, задавайте уровни и корректно выводите сообщения. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Основы модуля logging»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы модуля logging
  2. Обработчики, форматтеры и фильтры
  3. Структурированное журналирование
  4. Отладка с помощью pdb
← Назад к Python Academy