все 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Сообщить о неточности