Python Glossary English

все Python 3loggingпонятие

logging.LoggerAdapter

логгеры

Обёртка над логгером, добавляющая к каждой записи контекст — например, номер запроса или имя пользователя.

Синтаксис

adapter = logging.LoggerAdapter(logger, extra=None, merge_extra=False)

Контекст из extra адаптера становится атрибутом записи, но в строку сам не попадает: его надо назвать в формате, например %(user)s. По умолчанию extra адаптера целиком заменяет extra, переданный в вызов, — переданное молча теряется; merge_extra=True (с 3.13) их объединяет. Чтобы дописать контекст прямо в текст сообщения, переопределяют process().

Примеры

import logging, sys
h = logging.StreamHandler(sys.stdout)
h.setFormatter(logging.Formatter('[%(user)s] %(message)s'))
base = logging.getLogger('web')
base.addHandler(h)
log = logging.LoggerAdapter(base, {'user': 'anna'})
log.warning('вошла')  # → [anna] вошла
log.warning('чужой', extra={'user': 'bob'})  # → [anna] чужой
# Python 3.13+
import logging, sys
h = logging.StreamHandler(sys.stdout)
h.setFormatter(logging.Formatter('%(user)s/%(req)s %(message)s'))
base = logging.getLogger('api')
base.addHandler(h)
log = logging.LoggerAdapter(base, {'user': 'anna'}, merge_extra=True)
log.warning('ok', extra={'req': 7})  # → anna/7 ok

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности