【问题标题】:python: difference between logging.Logger and logging.getLoggerpython: logging.Logger 和 logging.getLogger 之间的区别
【发布时间】:2016-11-19 15:44:42
【问题描述】:

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

【问题讨论】:

    标签: python logging


    【解决方案1】:

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

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

    【讨论】:

    • 似乎没有解释为什么在使用 Logger ("test") 而不是 getLogger("test") 时打印消息。他们都得到了一个日志级别为 0 的 logging.Logger 对象。
    • 查看编辑,我提交的时候没想到有一部分被剪掉了。
    • 感谢 ioneyed,我在检查 logger.getEffectiveLevel() 后看到了区别,.Logger("test") 不会从任何记录器继承,而 .getLogger("test") 将从具有默认日志级别 == 30 的根记录器。
    猜你喜欢
    • 2021-06-10
    • 2021-01-02
    • 2016-03-26
    • 2011-03-24
    • 2014-01-03
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多