首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python: logging.Logger和logging.getLogger的区别

python: logging.Logger和logging.getLogger的区别
EN

Stack Overflow用户
提问于 2016-11-19 15:44:42
回答 1查看 6.2K关注 0票数 5

是的,我看到python说:“记录器从来没有直接实例化,但总是通过模块级函数logging.getLogger(name)",但我有一个问题要调试,并想知道根本原因。

下面是一个例子:

代码语言:javascript
复制
#!/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"),则将打印日志消息。

代码语言:javascript
复制
#!/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(“测试”)将记录器级别设置为logging.DEBUG。

代码语言:javascript
复制
#!/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")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-19 15:59:19

方法.getLogger("test")正在查找名称"test"的任何现有记录器配置,而.Logger("test")正在创建名为"test"的默认记录器,并将默认日志级别设置为0。如果getLogger方法找不到这个名称的记录器类,那么它将创建一个基本记录器,其有效级别为30 (https://docs.python.org/3/library/logging.html#logging-levels),它将忽略您的调试消息。您可以通过logger.getEffectiveLevel()检查以注意差异。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40694765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档