【发布时间】:2020-04-23 12:38:03
【问题描述】:
我用“click”库编写了一个 python cli。我还想使用 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创建一个记录器,我必须为我的记录器显式创建一个处理程序。 - 我必须在 both 记录器和处理程序上设置日志级别?
对吗?设置两次级别似乎很愚蠢。重点是什么?
还是我仍然误解正确的方法?
感谢您的帮助!
【问题讨论】:
标签: python logging click command-line-interface