为什么打电话来日志记录.info更改我的记录器打印的内容?

2024-09-25 08:39:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图让Python记录日志,尽管已经阅读了logging docs和{a2},但我不理解它的行为。在

我设置了全局日志级别,然后尝试记录一些内容:

logger = logging.getLogger()
print("Initially should be warn: %d" % logger.getEffectiveLevel())
logger.setLevel(logging.DEBUG)
print("Logger level: %d" % logger.getEffectiveLevel())

logger.info("Maybe I am printed?")

但是运行python my_script.py只会打印:

^{pr2}$

但是,如果我添加一个logging.info调用,例如

^{3}$

然后显示日志记录:

Initially should be warn: 30
Logger level: 10
INFO:root:I am printed
INFO:root:Maybe I am printed?

logging.info在做什么?在


Tags: infologging记录beloggeramlevelwarn
2条回答

第一个示例实际上会警告您,对于logger“root”(see here))找不到处理程序。这是因为,正如建议的那样,您没有为logger定义任何处理程序。在

以下是logging.info的实现:

def info(msg, *args, **kwargs):
    """
    Log a message with severity 'INFO' on the root logger.
    """
    if len(root.handlers) == 0:
        basicConfig()
    root.info(msg, *args, **kwargs)

{3}处理程序初始化时,也可以看到下面的处理程序}在初始化^时也会注意到}。在

logging.info的调用正在配置日志处理程序和格式化程序,以便它可以输出日志。如果您想自己执行此操作,以下代码将设置它:

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info("boo")

本教程的configuring logging部分提供了有关配置日志记录的更多详细信息。在

logging.info调用设置日志的代码在github.com中可用。它本质上只是在不存在处理程序的情况下创建处理程序。在

相关问题 更多 >