我使用了'click'库编写了一个Python命令行界面。我想同时使用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
创建记录器,我必须明确地为我的记录器创建处理程序。 - 并且我必须在记录器和处理程序上都设置日志级别?
是这样吗?设置两次级别似乎有些愚蠢。有什么意义吗?
还是我仍然误解了正确的方法?
感谢您的帮助!
logging.basicConfig(level=logging.INFO, format='%(message)s')
可以获得不带有“INFO:root:”的输出。 - Noam Nol