logging.basicConfig в Python не будет работать, если вызвать logging.info () перед объявлением - PullRequest
0 голосов
/ 30 мая 2019

Исходя из этого ответа, Более простой способ включить подробное ведение журнала

Давайте возьмем этот скрипт Python.

import argparse
import logging


def main():
    import argparse
    import logging

    parser = argparse.ArgumentParser(
        description='A test script for http://stackoverflow.com/q/14097061/78845'
    )
    parser.add_argument("-v", "--verbose", help="increase output verbosity",
                        action="store_true")

    args = parser.parse_args()
    if args.verbose:
        logging.basicConfig(level=logging.DEBUG)

    logging.info('Shown in debug and info mode')
    logging.debug('Only shown in debug mode')


if __name__ == "__main__":
    logging.info('Starting script!')
    main()

Запуск этого скрипта из терминала как python -m verbose -vничего печатать не будет.

Если вы прокомментируете строку logging.info('Starting script!') из файла, как в

if __name__ == "__main__":
    #logging.info('Starting script!')
    main()

, тогда ведение журнала работает, как и ожидалось.

Это выглядит какпопытка вызвать logging.info() до определения basicConfig полностью отключит ведение журнала.

Это ошибка в logging или обычная ошибка и почему это происходит?

IЯ на Python 3.6.7.

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Из документации logging: (Акцент на шахте)

 logging.basicConfig(**kwargs)

Выполняет базовую настройку системы ведения журнала, создав StreamHandler с форматером по умолчанию и добавив его в корневой каталог. Регистратор.

Функции debug (), info (), warning (), error () и критический () будет вызывать basicConfig () автоматически, если нет обработчиков определено для корневого логгера.

Эта функция ничего не делает, если в корневом логгере уже настроены обработчики .

Таким образом, ваш первый вызов logging.info в основном был произведен в автоматическом режиме. Ваша более поздняя попытка конфигурирования молча провалилась из-за автоматической конфигурации, которая уже произошла.

1 голос
/ 30 мая 2019

Не используйте basicConfig для изменения уровня.Используйте logging.getLogger().setLevel(logging.DEBUG), чтобы изменить уровень в корневом логгере.Это можно сделать на любом логгере или обработчике.

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