Кросс-модульная регистрация Python - PullRequest
6 голосов
/ 03 сентября 2011

Я погуглил и посмотрел документацию по умолчанию, но я не могу понять, почему это не дает три строки регистрации:

# main.py
import logging
import apple
import banana

log = logging.getLogger('main')
log.setLevel(logging.DEBUG)

ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)

log.addHandler(ch)

log.info("I'm in main!")
    # apple.py
    import logging
    
    log = logging.getLogger('main.apple')
    log.info("I'm here in apple!")
    
      # banana.py
      import logging
      
      log = logging.getLogger('main.banana')
      log.info("I'm here in banana!")
      
        # output
        2011-09-03 16:40:54,062 - main - INFO - I'm in main!
        

        Но пример в документации по ведению журнала работает нормально.

        Есть идеи?

        1 Ответ

        9 голосов
        / 03 сентября 2011

        Обработчик (StreamHandler) не был настроен до окончания импорта. Таким образом, команды регистрации в импортированных модулях не производят никакого вывода Некоторые обработчики печатают в файлы, другие обмениваются данными по сети, а некоторые - с консоли. Невозможно, чтобы операторы журналирования внутри импортированных модулей могли знать, что делать без добавления обработчика (обработчиков) в регистратор.

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

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