Я пытаюсь использовать переменную в формататоре регистратора, которая изменяет значение и хотела бы, чтобы ее отражали в сообщениях журнала. Я добился этого, вызывая setFormatter
каждый раз, когда происходит изменение. Мне было интересно, возможно ли избежать этого и заставить регистратор просто отслеживать переменную (например, поведение, аналогичное asctime). Следующий пример иллюстрирует проблему (см. foo
переменная, Несчастливые и Счастливые выходы).
import logging
foo = 'aaa'
logger = logging.getLogger('scratch')
logger.setLevel(logging.DEBUG)
log_ch = logging.StreamHandler()
log_ch.setFormatter(logging.Formatter('%%(levelname)s:%%(name)s:%%(asctime)s:%s:%%(message)s' % foo))
log_ch.setLevel(logging.DEBUG)
logger.addHandler(log_ch)
logger.info("hi")
# INFO:scratch:2019-06-12 00:27:10,630:aaa:hi
foo = 'bbb'
logger.info("hi")
# Unhappy
# INFO:scratch:2019-06-12 00:27:12,887:aaa:hi
log_ch.setFormatter(logging.Formatter('%%(levelname)s:%%(name)s:%%(asctime)s:%s:%%(message)s' % foo))
logger.info('hi')
# Happy
# INFO:scratch:2019-06-12 00:27:16,017:bbb:hi