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