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])
其中定义 MyClass
的 myclass.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 消息,然后处理程序可以根据它们的级别设置决定如何处理它们。
与相关
我知道这个问题已经被问过一百万次了,但我只是不知道为什么会这样:
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])
其中定义 MyClass
的 myclass.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 消息,然后处理程序可以根据它们的级别设置决定如何处理它们。
与