Nat*_*teV 7 python logging click command-line-interface
我用'click'库编写了一个python cli。我还想使用 python 的内置logging模块来登录到控制台。但是我一直在努力将日志消息发送到控制台。我尝试了一个非常简单的方法:
logger = logging.getLogger(__name__)
@click.command()
def cli():
logger.setLevel("INFO")
logger.info("Does this work?")
print("done.")
Run Code Online (Sandbox Code Playgroud)
记录器内容没有出现在我的控制台中。也许它需要一个处理程序来显式地将日志消息发送到标准输出?
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.")
Run Code Online (Sandbox Code Playgroud)
不幸的是,这也不起作用。
第三个选项——创建处理程序并为处理程序和记录器设置日志级别——有效:
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.")
Run Code Online (Sandbox Code Playgroud)
这好像是:
logging.getLogger,我必须明确地为我的记录器创建一个处理程序。那正确吗?两次设置级别似乎很愚蠢。重点是什么?
还是我仍然误解了正确的方法?
谢谢你的帮助!
小智 9
我个人喜欢loguru处理日志的库。我认为这更简单。
这是我通常如何做的一个例子:
\n\nimport click\nfrom loguru import logger\n\n\n@click.command()\n@click.option(\'--count\', default=1, help=\'Number of greetings.\')\n@click.option(\'--name\', prompt=\'Your name\', help=\'The person to greet.\')\ndef hello(count, name):\n """Simple program that greets NAME for a total of COUNT times."""\n for x in range(count):\n logger.info(f"That\'s it, beautiful and simple logging! - Counter: {x}")\n click.echo(\'Hello %s!\' % name)\n\nif __name__ == \'__main__\':\n hello()\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x9d\xaf python loguru-click-cli-test.py --count=3\nYour name: Geraldo\n2020-06-10 20:02:48.297 | INFO | __main__:hello:11 - That\'s it, beautiful and simple logging! - Counter: 0\nHello Geraldo!\n2020-06-10 20:02:48.297 | INFO | __main__:hello:11 - That\'s it, beautiful and simple logging! - Counter: 1\nHello Geraldo!\n2020-06-10 20:02:48.297 | INFO | __main__:hello:11 - That\'s it, beautiful and simple logging! - Counter: 2\nHello Geraldo!\nRun Code Online (Sandbox Code Playgroud)\n\n洛鲁鲁: https: //github.com/Delgan/loguru
\n小智 7
我必须手动设置
logging.basicConfig(level=logging.INFO)
Run Code Online (Sandbox Code Playgroud)
例子
import click
import logging
logging.basicConfig(level=logging.INFO)
@click.command()
def cli():
logging.info("it works")
Run Code Online (Sandbox Code Playgroud)
给出
$ mycli
INFO:root:it works
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3101 次 |
| 最近记录: |