Ведение журнала Python: как определить, когда был добавлен обработчик? - PullRequest
1 голос
/ 30 апреля 2019

Иногда у меня есть несколько обработчиков, подключенных к данному регистратору, но я хочу только один, потому что журналы отображаются в виде повторяющихся строк.

Я хотел бы знать, какой код или модуль на самом деле добавил обработчик, чтобы я мог их включать / выключать.

Класс LogRecord содержит много информации о том, куда была добавлена ​​сама запись, но есть ли эквивалентная информация о том, когда был добавлен обработчик?

1 Ответ

2 голосов
/ 30 апреля 2019

Вы можете установить обезьяна методом Logger.addHandler, например,

def monkeypatch_logging():
    import logging
    add_handler_orig = logging.Logger.addHandler

    def _addHandler(self, hdlr):
        import traceback
        traceback.print_stack()
        add_handler_orig(self, hdlr)

    logging.Logger.addHandler = _addHandler

Поместите код где-нибудь рядом с точкой входа, чтобы он работал достаточно рано, например,

if __name__ == '__main__':
    import logging
    monkeypatch_logging()
    logging.basicConfig(level=logging.INFO)
    logging.info('hello world')

выведет:

  File "spam.py", line 18, in <module>
    logging.basicConfig(level=logging.INFO)
  File "/usr/lib64/python3.6/logging/__init__.py", line 1823, in basicConfig
    root.addHandler(h)
  File "spam.py", line 10, in _addHandler
    traceback.print_stack()
INFO:root:hello world

Трассировка стека покажет вам, где был вызван Logger.addHandler.

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