簡體   English   中英

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)

工作,當它顯然跳轉到EDIT )不應該?

一些背景信息: MyClass是我正在開發的一個庫。 它的根__init__.py包含日志代碼,(雖然我認為庫應該在那個文件中有一些與日志相關的代碼)。

如果消息從未到達處理程序,處理程序的級別是什么並不重要。 默認情況下,根記錄器級別為 WARN; 它不會向任何處理程序發送 INFO 或 DEBUG 消息。 當您將根記錄器設置為 DEBUG 時,它將向處理程序發送 DEBUG 消息,然后處理程序可以根據它們的級別設置決定如何處理它們。

日志相關| error() 被發送到 FileHandler... 但不是其他日志級別

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM