当我运行以下代码时,日志记录工作正常。但是当我在 setup_logger 下评论 #1) 和 #2) 时,日志不会显示。
#1) 和 #2) 在这里做什么?
import logging
import sys
def get_logger(name):
print('get_logger -- ', name)
log = logging.getLogger("hello.{}".format(name))
return log
def setup_logger():
print('setup_logger')
root = logging.getLogger("")
root.setLevel(logging.ERROR)
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logging.Formatter(
fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
))
root.addHandler(handler)
logger = logging.getLogger("hello") #1
logger.setLevel(logging.DEBUG) #2
LOG = get_logger(__name__)
setup_logger()
print(LOG)
def main():
LOG.debug('hello')
if __name__ == '__main__':
main()
答案 0 :(得分:0)
您标记的第一行获取具有给定名称的记录器。如果当前没有您提供的名称的记录器,则会创建一个新记录器(也称为 Singleton)。您可以阅读有关 logging.getLogger
in the Python documentation 的更多信息:
返回具有指定名称的记录器,或者,如果名称为 None,则返回记录器 这是层次结构的根记录器。如果 指定,名称通常是点分隔的分层名称 如“a”、“a.b”或“a.b.c.d”。这些名字的选择完全取决于 使用日志记录的开发者。
使用给定名称对此函数的所有调用都返回相同的记录器实例。 这意味着记录器实例永远不需要 在应用程序的不同部分之间传递。
您标记的第二行设置了记录器实例的日志级别。如果您将日志级别设置为 DEBUG
,您记录的所有消息都将打印到控制台/文件。如果将其设置为 INFO
,则除
将记录调试消息。等等。 Quote from the docs again:
将此记录器的阈值设置为级别。记录消息 不严重的级别将被忽略;记录消息 具有严重级别或更高级别的处理程序或 处理程序为此记录器提供服务,除非处理程序的级别已设置为 严重性级别高于级别。
创建记录器时,级别设置为 NOTSET(这会导致所有 当记录器是根记录器时要处理的消息,或 当记录器是非根记录器时委托给父级)。笔记 根记录器是使用级别 WARNING 创建的。
如果你还有问题,我可以编辑我的帖子来回答。