python日志记录设置调试级别

时间:2021-02-04 12:42:28

标签: python

当我运行以下代码时,日志记录工作正常。但是当我在 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()

1 个答案:

答案 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 创建的。

如果你还有问题,我可以编辑我的帖子来回答。