gpt4 book ai didi

python:logging.Logger 和 logging.getLogger 之间的区别

转载 作者:太空狗 更新时间:2023-10-30 01:12:43 28 4
gpt4 key购买 nike

是的,我看到 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")

这里使用logging.getLogger("test"),不会打印日志信息。

如果我将 logging.getLogger("test") 更改为 logging.Logger("test"),将打印日志消息。

#!/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")

或者我们可以使用 logging.getLogger("test") 将记录器级别设置为 logging.DEBUG。

#!/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" 的任何现有记录器配置,而 .Logger("test") 正在创建一个名为 "test" 的默认记录器,并将默认日志级别设置为 0。如果 getLogger 方法没有找到记录器类通过该名称,它将创建一个基本记录器,其有效级别为 30(https://docs.python.org/3/library/logging.html#logging-levels),它将忽略您的 DEBUG 消息。您可以通过 logger.getEffectiveLevel() 查看差异。

理想情况下,您会创建记录器并根据正确的命名/配置设置它们,而不是接受默认配置。

关于python:logging.Logger 和 logging.getLogger 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40694765/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com