Python logging.conf перезагрузить конфигурацию - PullRequest
1 голос
/ 08 июля 2019

в моем коде Python я читаю конфигурацию журналирования из файла, в котором я поместил формат, который я хотел бы иметь в своем коде.
Когда я пытаюсь перезагрузить конфигурацию во время выполнения, кажется, что набор некоторых дополнительныхenv Я положил в мои средства форматирования потеряны, и у меня есть следующая ошибка.

Traceback (most recent call last):
  File "/usr/lib64/python2.7/logging/__init__.py", line 861, in emit
    msg = self.format(record)
  File "/usr/lib64/python2.7/logging/__init__.py", line 734, in format
    return fmt.format(record)
  File "/usr/lib64/python2.7/logging/__init__.py", line 469, in format
    s = self._fmt % record.__dict__
KeyError: 'hostname'
Logged from file conn.py, line 304

Чтобы заметить, что мой logging.conf выглядит следующим образом:

[formatter_simpleFormatter]
format=[%(levelname)s] %(asctime)s [ThId-%(threadName)-10s] [%(filename)s:%(funcName)s:%(lineno)s] [%(hostname)s] %(message)s
datefmt=%m/%d/%Y %I:%M:%S %p

где имя хоста устанавливается в коде с помощью:

class HostnameFilter(logging.Filter):
    hostname = platform.node()

    def filter(self, record):
        record.hostname = HostnameFilter.hostname
        return True

## Log Logger.
class Logger:
    """!@brief
    Logger wrapper
    """
    def __init__(self):
        self.log = logging.getLogger("MYCONF")
        self.log.addFilter(HostnameFilter())

Странно то, что ошибки появляются в классах (conn.py), а не в моих, может быть, это код некоторых библиотек, которые я использую,также ведется логирование.

Это поток?Должен ли я сделать что-то еще?

1 Ответ

0 голосов
/ 08 июля 2019

Поскольку форматирование происходит в обработчиках, а события, регистрируемые в регистраторе, передаются обработчикам этого регистратора и обработчикам в дальнейшем иерархии регистратора, вам необходимо быть уверенным, что атрибут hostname всегда добавляется в запись.- что может быть не так, если для записи сообщения используется другой регистратор.Попробуйте прикрепить фильтр к соответствующим обработчикам, а не к регистраторам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...