Я написал 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
, я должен явно создать обработчик для моего регистратора. - и мне нужно установить уровень логирования на и регистратор и обработчик?
Это верно? Кажется глупым устанавливать уровень дважды. В чем смысл?
Или я все еще неправильно понимаю, как это сделать?
Спасибо за помощь!