是的,我看到python文档说:“记录器从不直接实例化,而是始终通过模块级函数logging.getLogger(name)”,但我有一个问题需要调试,并想知道根本原因。
以下是一个例子:
#!/usr/bin/python
import logging
logger = logging.getLogger("test")
format = "%(asctime)s [%(levelname)-8s] %(message)s"
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(format, datefmt="%Y-%m-%d %H:%M:%S"))
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
logger.info("test")
使用日志记录。getLogger(“测试”)在此,不会打印日志消息。
如果我更改日志记录。getLogger(“测试”)用于日志记录。记录器(“测试”),将打印日志消息。
#!/usr/bin/python
import logging
logger = logging.Logger("test")
format = "%(asctime)s [%(levelname)-8s] %(message)s"
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(format, datefmt="%Y-%m-%d %H:%M:%S"))
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
logger.info("test")
或者我们可以使用日志记录。getLogger(“测试”)并将logger级别设置为logging。调试。
#!/usr/bin/python
import logging
logger = logging.getLogger("test")
format = "%(asctime)s [%(levelname)-8s] %(message)s"
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(format, datefmt="%Y-%m-%d %H:%M:%S"))
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.info("test")
方法。getLogger(“test”)
正在查找名称“test”
的任何现有记录器配置,而。记录器(“测试”)
正在创建名为“测试”的默认记录器,并将默认日志级别设置为0。如果getLogger
方法没有找到该名称的记录器类,那么它将创建一个有效级别为30的基本记录器(https://docs.python.org/3/library/logging.html#logging-级别),将忽略调试消息。您可以通过记录器进行检查。getEffectiveLevel()
以注意差异。
理想情况下,您应该创建记录器,并根据正确的命名/配置来设置它们,而不是接受默认配置。