Как добавить динамический MDC в журналы в Python3 - PullRequest
1 голос
/ 07 июня 2019

Я хотел бы добавить 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
...