[英]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)
工作,當它顯然(跳轉到EDIT )不應該?
一些背景信息: MyClass
是我正在開發的一個庫。 它的根__init__.py
包含日志代碼,(雖然我認為庫應該在那個文件中有一些與日志相關的代碼)。
如果消息從未到達處理程序,處理程序的級別是什么並不重要。 默認情況下,根記錄器級別為 WARN; 它不會向任何處理程序發送 INFO 或 DEBUG 消息。 當您將根記錄器設置為 DEBUG 時,它將向處理程序發送 DEBUG 消息,然后處理程序可以根據它們的級別設置決定如何處理它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.