Сообщить об ошибке.

Функции регистрации сообщений модуля logging

Синтаксис:

import logging

logging.debug(msg, *args, **kwargs)
logging.info(msg, *args, **kwargs)
logging.warning(msg, *args, **kwargs)
logging.error(msg, *args, **kwargs)
logging.critical(msg, *args, **kwargs)

Параметры:

  • msg - строка формата сообщения,
  • *args - аргументы, которые объединяются в msg,
  • *kwargs - ключевые аргументы.

Возвращаемое значение:

  • функция logging.debug регистрируют сообщение с уровнем DEBUG,
  • функция logging.info регистрируют сообщение с уровнем INFO,
  • функция logging.warning регистрируют сообщение с уровнем WARNING,
  • функция logging.error регистрируют сообщение с уровнем ERROR,
  • функция logging.critical регистрируют сообщение с уровнем CRITICAL.

Описание:

Эти функции регистрируют сообщение в корневом логгере с уровнем, соответствующим собственному названию.

Аргумент msg - это строка формата сообщения, а *args - аргументы, которые объединяются в msg с помощью оператора форматирования строки. Обратите внимание, это означает, что вы можете использовать ключевые аргументы в строке формата вместе с одним аргументом словаря.

Операция форматирования в стиле printf % не выполняется для msg, если не предоставлены аргументы *args.

В **kwargs проверяются три ключевых аргумента:

Первый необязательный ключевой аргумент exc_info, если он равен True, то вызывается функция sys.exc_info() для получения информации об исключении, которая добавляется к сообщению msg. Если указан кортеж исключения в формате, возвращаемом sys.exc_info() или экземпляр исключения, то для добавления к сообщению msg используется либо переданный кортеж, либо экземпляр исключения соответственно.

Второй необязательный ключевой аргумент stack_info, который по умолчанию равен False. Если stack_info=True, то информация о стеке добавляется к сообщению регистрации, включая фактический вызов регистрации. Обратите внимание, что это не та информация стека, которая отображается при указании exc_info: первая - это кадры стека от нижней части стека до вызова регистрации в текущем потоке, тогда как вторая - это информация о кадрах стека, которые были размотаны после исключения при поиске обработчиков исключений.

Можно указать stack_info независимо от exc_info. Например просто показать, как достигается определенная точка коде, даже когда исключений не возникало. Кадры стека печатаются после строки заголовка, которая гласит: Stack (most recent call last):. Это имитирует Traceback (most recent call last):, который используется при отображении исключительных кадров.

Третий необязательный ключевой аргумент является extra, который может использоваться для передачи словаря, который используется для заполнения __dict__ объекта logging.LogRecord, созданного для события регистрации, пользовательскими атрибутами. Эти пользовательские атрибуты можно использовать по своему усмотрению. Например, они могут быть включены в зарегистрированные сообщения. Например:

FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logging.warning('Protocol problem: %s', 'connection reset', extra=d)

Напечатает что-то вроде:

2020-07-08 22:20:02,165 192.168.0.1 docs-python.ru  Protocol problem: connection reset

Ключи в словаре, переданные в extra, не должны конфликтовать с ключами, используемыми системой регистрации. для получения дополнительной информации о том, какие ключи используются системой ведения журнала смотрите документацию по объекту logging.Formatter().

Если использовать эти атрибуты в зарегистрированных сообщениях, то необходимо проявить определенную осторожность. Например, в приведенном выше примере для logging.Formatter() была задана строка формата, которая ожидает clientip и user в словаре атрибутов logging.LogRecord. Если они отсутствуют, то сообщение не будет зарегистрировано, потому что возникнет исключение форматирования строки. Так что в этом случае вам всегда нужно передать дополнительный словарь с этими ключами.

Эти функции предназначены для использования в специализированных условиях, таких как многопоточные серверы, где один и тот же код выполняется во многих контекстах и возникающие интересные условия зависят от этого контекста, например IP-адрес удаленного клиента и имя пользователя, как в приведенном выше примере. В таких обстоятельствах вполне вероятно, что специализированные средства форматирования будут использоваться с конкретными обработчиками.

Примечание. Вышеупомянутые функции регистрации сообщений не должны использоваться в потоках в более ранних версиях, чем Python-3.2, если только не был добавлен хотя бы один обработчик в корневой регистратор до запуска потоков. В ранних версиях Python из-за недостатка безопасности потоков в logging.basicConfig(), в редких случаях, приводит к многократному добавлению обработчиков в корневой логгер, что, в свою очередь, может приводить к нескольким сообщениям для одного и того же события.

Примеры:

Больше примеров смотрите в разделе "Простое использование модуля logging в Python".

>>> import logging
>>> logging.basicConfig(level=logging.DEBUG)
>>> logging.debug('This message DEBUG')
# DEBUG:root:This message DEBUG
>>> logging.info('This message INFO')
# INFO:root:This message INFO
>>> logging.warning('This message WARNING')
# WARNING:root:This message WARNING
>>> logging.error('This message ERROR')
# ERROR:root:This message ERROR
>>> logging.critical('This message CRITICAL')
# CRITICAL:root:This message CRITICAL