Как вывести логи с python входами в клик? - PullRequest
3 голосов
/ 23 апреля 2020

Я написал python cli с библиотекой 'click'. Я также хотел бы использовать встроенный модуль python logging для входа в консоль. Но я изо всех сил пытался получить сообщения регистрации на консоль. Я попробовал очень простой подход:

logger = logging.getLogger(__name__)

@click.command()
def cli():
    logger.setLevel("INFO")
    logger.info("Does this work?")
    print("done.")

Содержимое журнала не отображается в моей консоли. Может быть, нужен обработчик для явной отправки сообщений журнала на стандартный вывод?

logger = logging.getLogger(__name__)

@click.command()
def cli():
    handler = logging.StreamHandler(sys.stdout)
    handler.setFormatter(logging.Formatter('%(asctime)s %(message)s'))
    handler.setLevel("INFO")
    logger.addHandler(handler)
    logger.info("Does this work?")
    print("done.")

К сожалению, это тоже не работает.

Третий вариант - создание обработчика и настройка уровней журналов для обработчика и регистратора - работает:

logger = logging.getLogger(__name__)

@click.command()
def cli():
    logger.setLevel("INFO")
    handler = logging.StreamHandler(sys.stderr)
    handler.setFormatter(logging.Formatter('%(asctime)s %(message)s'))
    handler.setLevel("INFO")
    logger.addHandler(handler)
    logger.info("Does this work?")
    print("done.")

Похоже, что:

  • , если создавая регистратор с logging.getLogger, я должен явно создать обработчик для моего регистратора.
  • и мне нужно установить уровень логирования на и регистратор и обработчик?

Это верно? Кажется глупым устанавливать уровень дважды. В чем смысл?

Или я все еще неправильно понимаю, как это сделать?

Спасибо за помощь!

...