Python 记录器未从根记录器继承级别

Python loggers not inheriting level from root logger

我知道这个问题已经被问过一百万次了,但我只是不知道为什么会这样:

import logging
from mylib import MyClass

hdlr = logging.FileHandler("MyLog.log", encoding="utf-16", mode="w")
hdlr.setFormatter(
    logging.Formatter("[%(levelname)s] %(name)s <%(module)s.%(funcName)s>  %(message)s")
)
hdlr.setLevel(logging.DEBUG)

myobj = MyClass(handlers=[hdlr])

其中定义 MyClassmyclass.py 看起来像这样:

import logging
logger = logging.getLogger("MyClass")

class MyClass:
    def __init__(self, handlers):
        for hdlr in handlers:
            logging.root.addHandler(hdlr)

这只会输出文件中的 WARNING 条消息。

我阅读了 问题,并确认在将处理程序添加到根记录器之前我没有进行任何记录。

然而替换这一行,

hdlr.setLevel(logging.DEBUG)

对此:

logging.root.setLevel(logging.DEBUG)

有效,当它 apparently跳转到 EDIT)不应该?

一些背景信息:MyClass 是我正在使用的库。它的根 __init__.py 不包含日志代码,(尽管我认为库应该在该文件中包含一些与日志相关的代码)。

如果消息从未到达处理程序,则处理程序的级别是什么并不重要。默认情况下,根记录器级别为 WARN;它不会向任何处理程序发送 INFO 或 DEBUG 消息。当您将根记录器设置为 DEBUG 时,它将向处理程序发送 DEBUG 消息,然后处理程序可以根据它们的级别设置决定如何处理它们。

相关