如何在click cli中使用python日志输出日志?

问题描述 投票:4回答:1

我已经用'click'库编写了python cli。我还想使用python的内置logging模块登录控制台。但是我一直在努力将日志消息发送到控制台。我尝试了一种非常简单的方法:

logger = logging.getLogger(__name__)

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

记录器内容未出现在我的控制台中。也许需要一个处理程序来将日志消息显式发送到stdout?

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创建记录器,则必须为记录器显式创建一个处理程序。
  • 而且我必须在记录器和处理程序的[[both上设置日志级别?
是吗?两次设置水平似乎很愚蠢。重点是什么?

还是我仍然误解了这样做的正确方法?

感谢您的帮助!

python logging click command-line-interface
1个回答
0
投票
我个人喜欢loguru库来处理日志。我认为这更简单。

这是我通常的用法示例:

import click from loguru import logger @click.command() @click.option('--count', default=1, help='Number of greetings.') @click.option('--name', prompt='Your name', help='The person to greet.') def hello(count, name): """Simple program that greets NAME for a total of COUNT times.""" for x in range(count): logger.info(f"That's it, beautiful and simple logging! - Counter: {x}") click.echo('Hello %s!' % name) if __name__ == '__main__': hello()

❯ python loguru-click-cli-test.py --count=3
Your name: Geraldo
2020-06-10 20:02:48.297 | INFO     | __main__:hello:11 - That's it, beautiful and simple logging! - Counter: 0
Hello Geraldo!
2020-06-10 20:02:48.297 | INFO     | __main__:hello:11 - That's it, beautiful and simple logging! - Counter: 1
Hello Geraldo!
2020-06-10 20:02:48.297 | INFO     | __main__:hello:11 - That's it, beautiful and simple logging! - Counter: 2
Hello Geraldo!
Loguru:https://github.com/Delgan/loguru    
© www.soinside.com 2019 - 2024. All rights reserved.