logging — журналирование событий

Этот модуль предоставляет облегчённое подмножество стандартного пакета logging из Python, адаптированное для MicroPython. Он поддерживает журналирование по уровням через иерархически именованные объекты Logger, небольшой набор обработчиков (StreamHandler, FileHandler), форматирование в стиле printf через Formatter, а также удобные функции уровня модуля, эквивалентные тем, что работают с корневым логгером.

Модуль достаточно близко следует знакомому API CPython, так что простые приложения, написанные для стандартной библиотеки, должны работать без изменений. Фильтры, блокировки для нескольких процессов, формат конфигурационного файла и большинство классов обработчиков не предоставляются.

Константы уровней

logging.CRITICAL: int

Числовое значение 50. Используется для невосстановимых ошибок.

logging.ERROR: int

Числовое значение 40. Используется для серьёзных проблем.

logging.WARNING: int

Числовое значение 30. Уровень по умолчанию для только что настроенного корневого логгера.

logging.INFO: int

Числовое значение 20. Используется для подтверждающих сообщений.

logging.DEBUG: int

Числовое значение 10. Используется для подробного диагностического вывода.

logging.NOTSET: int

Числовое значение 0. Указывает на логгер без настроенного уровня (в этом случае эффективный уровень наследуется от корневого логгера или равен WARNING).

Функции

logging.getLogger(name: str | None = None) Logger

Возвращает Logger, зарегистрированный под именем name, создавая его при первом использовании. Если name равно None, возвращается корневой логгер. Первый вызов с name="root" (или с неуказанным name) неявно вызывает basicConfig, чтобы присоединить StreamHandler по умолчанию, пишущий в sys.stderr.

logging.log(level: int, msg: str, *args) None

Журналирует сообщение с уровнем level на корневом логгере. Аргументы args подставляются в msg с использованием форматирования в стиле printf через %; единственный аргумент-словарь используется как отображение.

logging.debug(msg: str, *args) None

Эквивалентно getLogger().debug(msg, *args).

logging.info(msg: str, *args) None

Эквивалентно getLogger().info(msg, *args).

logging.warning(msg: str, *args) None

Эквивалентно getLogger().warning(msg, *args).

logging.error(msg: str, *args) None

Эквивалентно getLogger().error(msg, *args).

logging.critical(msg: str, *args) None

Эквивалентно getLogger().critical(msg, *args).

logging.exception(msg: str, *args, exc_info: bool | BaseException = True) None

Эквивалентно getLogger().exception(msg, *args, exc_info=exc_info). Журналирует сообщение с уровнем ERROR и дополнительно форматирует трассировку активного исключения, когда exc_info истинно. Если exc_info само является BaseException, используется трассировка этого исключения; иначе при наличии вызывается sys.exc_info().

logging.shutdown() None

Закрывает каждый обработчик, присоединённый к каждому известному логгеру, и забывает логгеры. Регистрируется автоматически через sys.atexit, когда этот хук доступен.

logging.addLevelName(level: int, name: str) None

Связывает текстовое имя name с числовым уровнем level, чтобы Formatter мог отобразить его через %(levelname)s.

logging.basicConfig(filename: str | None = None, filemode: str = 'a', format: str | None = None, datefmt: str | None = None, level: int = WARNING, stream=None, encoding: str = 'UTF-8', force: bool = False) None

Настраивает корневой логгер с единственным обработчиком.

Если задан filename, создаётся FileHandler с использованием filemode и encoding; иначе используется StreamHandler, пишущий в stream (по умолчанию sys.stderr).

Параметры format и datefmt передаются в новый Formatter.

Параметр level задаёт уровень как обработчика, так и корневого логгера.

Если у корневого логгера уже есть обработчики, эта функция ничего не делает, если только force не равно True — в этом случае существующие обработчики закрываются и заменяются.

Классы

class logging.Logger(name: str, level: int = NOTSET)

Именованный логгер. Создавайте логгеры через getLogger, а не напрямую, чтобы getLogger мог возвращать один и тот же экземпляр для одного и того же имени.

name: str

Имя логгера с точечной нотацией.

level: int

Настроенный числовой уровень. 0 (NOTSET) означает «наследовать».

handlers: list

Список экземпляров Handler, присоединённых к этому логгеру. Когда он пуст, сообщения направляются обработчикам корневого логгера.

setLevel(level: int) None

Устанавливает пороговый уровень логгера.

isEnabledFor(level: int) bool

Возвращает True, если сообщение уровня level будет обработано этим логгером.

getEffectiveLevel() int

Возвращает первое ненулевое из: уровня этого логгера, уровня корневого логгера или WARNING.

log(level: int, msg: str, *args) None

Журналирует msg с уровнем level. Аргументы args подставляются в msg с помощью оператора %; если первый позиционный аргумент является словарём, он используется как отображение.

debug(msg: str, *args) None

Журналирует msg с уровнем DEBUG.

info(msg: str, *args) None

Журналирует msg с уровнем INFO.

warning(msg: str, *args) None

Журналирует msg с уровнем WARNING.

error(msg: str, *args) None

Журналирует msg с уровнем ERROR.

critical(msg: str, *args) None

Журналирует msg с уровнем CRITICAL.

exception(msg: str, *args, exc_info: bool | BaseException = True) None

Журналирует msg с уровнем ERROR и, когда exc_info истинно, добавляет отформатированную трассировку. Если exc_info является экземпляром BaseException, отображается трассировка этого исключения; иначе активное исключение запрашивается через sys.exc_info().

addHandler(handler: Handler) None

Присоединяет handler к этому логгеру.

hasHandlers() bool

Возвращает True, если к этому логгеру присоединены какие-либо обработчики.

class logging.Handler(level: int = NOTSET)

Базовый класс для всех обработчиков. Подклассы реализуют emit().

level: int

Пороговый уровень обработчика.

formatter: 'Formatter | None'

Активный Formatter или None.

setLevel(level: int) None

Устанавливает пороговый уровень обработчика.

setFormatter(formatter: Formatter) None

Присоединяет formatter к этому обработчику.

format(record: LogRecord) str

Отображает record с использованием настроенного форматтера.

close() None

Освобождает ресурсы, удерживаемые обработчиком. Вызывается из shutdown и из FileHandler при его закрытии.

class logging.StreamHandler(stream=None)

Обработчик, который записывает отформатированные записи, за которыми следует self.terminator (по умолчанию "\n"), в stream. По умолчанию stream равен sys.stderr.

stream

Объект целевого потока.

terminator: str

Строка, добавляемая после каждой отформатированной записи. По умолчанию "\n".

emit(record: LogRecord) None

Записывает record в stream, если его уровень соответствует порогу обработчика.

close() None

Сбрасывает буфер нижележащего потока, когда тот предоставляет метод flush.

class logging.FileHandler(filename: str, mode: str = 'a', encoding: str = 'UTF-8')

Подкласс StreamHandler, который открывает filename с заданными mode и encoding и записывает в него отформатированные записи. Нижележащий файл закрывается при close().

class logging.Formatter(fmt: str | None = None, datefmt: str | None = None)

Отображает экземпляры LogRecord в строки.

fmt — это шаблон в стиле printf. Распознаваемые ключи: %(name)s, %(message)s, %(msecs)d, %(asctime)s и %(levelname)s. Если не задан, по умолчанию используется "%(levelname)s:%(name)s:%(message)s".

datefmt — это шаблон time.strftime, используемый для отображения %(asctime)s. По умолчанию "%Y-%m-%d %H:%M:%S".

usesTime() bool

Возвращает True, если шаблон формата ссылается на asctime.

formatTime(datefmt: str, record: LogRecord) str | None

Форматирует record.ct с использованием time.strftime и datefmt. Возвращает None на платформах, где time.strftime недоступен.

format(record: LogRecord) str

Отображает record. Если шаблон использует asctime, сначала вызывается formatTime(), чтобы заполнить record.asctime.

class logging.LogRecord

Контейнер для данных, передаваемых от Logger его обработчикам. Экземпляры заполняются через set(); реализации логгера повторно используют одну запись на логгер, чтобы сократить количество выделений памяти.

name: str

Имя логгера-источника.

levelno: int

Числовой уровень этой записи.

levelname: str

Текстовое имя уровня.

message: str

Полностью отформатированное сообщение журнала.

ct: float

Время создания, как возвращает time.time().

msecs: int

Миллисекундная составляющая ct.

asctime: str | None

Человекочитаемая временная метка; заполняется отложенно через Formatter.

set(name: str, level: int, message: str) None

Инициализирует запись заданными значениями и фиксирует текущее время.