Параметр extra
просто игнорируется стандартным форматером.
Это означает, что вам потребуется пользовательский Formatter
для удобной обработки дополнительных аргументов. Например, этот класс ищет дополнительные параметры в LogRecord и, если они есть, добавляет - extra {key: value, ...}
к сообщению:
class ExFormatter(logging.Formatter):
def_keys = ['name', 'msg', 'args', 'levelname', 'levelno',
'pathname', 'filename', 'module', 'exc_info',
'exc_text', 'stack_info', 'lineno', 'funcName',
'created', 'msecs', 'relativeCreated', 'thread',
'threadName', 'processName', 'process', 'message']
def format(self, record):
string = super().format(record)
extra = {k: v for k,v in record.__dict__.items()
if k not in self.def_keys}
if len(extra)>0:
string += " - extra: " + str(extra)
return string
Демо-версия:
>>> log = logging.Logger('foo')
>>> hnd = logging.StreamHandler(sys.stdout)
>>> hnd.setFormatter(ExFormatter())
>>> log.addHandler(hnd)
>>> log.log(logging.INFO, 'foo', extra={'bar': 'baz'})
foo - extra: {'bar': 'baz'}