我已经用'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
创建记录器,则必须为记录器显式创建一个处理程序。还是我仍然误解了这样做的正确方法?
感谢您的帮助!
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