Вход в пакет - PullRequest
       1

Вход в пакет

0 голосов
/ 24 сентября 2018

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

Однако, поскольку я пишу не отдельное приложение, а библиотеку, которая должна вызываться другими программами, я запутался, когда мне нужно использовать мою утилиту logging_setup() для получения желаемых результатов ведения журнала.что я хочу.Это заставило меня задуматься о том, было ли хорошей идеей начать с использования системы журналирования в моем пакете.

Где мне использовать мою logging_setup() утилиту, если где-нибудь?

РЕДАКТИРОВАТЬ: Вот функцияЯ упоминаю выше:

def logging_setup(cfg_path=definitions.LOG_CONFIG_PATH, lvl=logging.INFO):
    """Setup logging tool from YAML configuration file.

    This should only be run once. Formatted (or configured) logging can only be
    done from within functions/classes in other modules.
    """

    # create directory for log files if not already there
    try:
        os.makedirs(definitions.LOGS_PATH)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise

    # configure logging from yaml config file
    if os.path.exists(cfg_path):
        with open(cfg_path, 'rt') as f:
            config = yaml.safe_load(f.read())

        logging.config.dictConfig(config)

    else:
        logging.basicConfig(level=lvl)

1 Ответ

0 голосов
/ 24 сентября 2018

Где мне использовать мою утилиту logging_setup(), если где-нибудь?

В коде библиотеки вам не следует нигде настраивать ведение журнала.Пользователи вашей библиотеки (распространители приложений) могут настраивать обработчики журналов.

Как автор библиотеки, вы ничего не знаете о контексте времени выполнения, вы даже не знаете, существует лиДоступная для записи файловая система доступна для создания файлов журналов.Но чтобы использовать logging, вам не нужно заботиться о конфигурации - просто import logging и создавайте регистраторы на уровне модуля, и вы можете регистрировать события из кода библиотеки.Код библиотеки не должен решать , куда будут отправлены эти события журнала, или они вообще будут куда-либо идти.

Если вы предоставляете приложение и хотите записывать вывод в журнал, тогда настройте ведение журнала как первое, что ваше приложение делает при запуске - обычно в Python это означает вызов logging.config.dictConfigили подобное выполняется вскоре после входа в функцию main() (пожалуйста, убедитесь, что конфигурация регистрации не происходит во время import).

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