Я хотел бы добавить MDC для регистрации сообщений, которые динамически обновляются. Конкретным примером будет добавление значения переменной в сообщения журнала, которые обновляются при обновлении переменной. Я пытался сделать это с помощью LoggerAdapter, но однажды установленное значение остается статическим, даже если переменная в моем коде обновлена.
Вот пользовательский адаптер, созданный мной для достижения этой цели:
class CustomAdapter(logging.LoggerAdapter):
def process(self, msg, kwargs):
for key in sorted(self.extra.keys()):
msg = '[{0}] {1}'.format(self.extra.get(key), msg)
return msg, kwargs
Но если я передам переменную в пользовательский адаптер, который будет добавлен перед всеми сообщениями журнала, он не будет обновляться динамически.
Например, я хотел бы добавить значение переменной x ко всем сообщениям журнала, но если x изменится, я бы хотел, чтобы новое значение автоматически добавлялось ко всем сообщениям журнала после изменений x.
Как добавить динамический MDC для регистрации сообщений в Python3?
Редактировать: ответил на мой собственный вопрос. Измените CustomAdapter для использования вызова функции и передачи лямбда-выражения, возвращающего переменную, которую вы хотите обновить. Поэтому адаптер должен быть:
class CustomAdapter(logging.LoggerAdapter):
def process(self, msg, kwargs):
for key in sorted(self.extra.keys()):
msg = '[{0}] {1}'.format(self.extra.get(key)(), msg)
return msg, kwargs