是的,我看到python文檔說:「記錄器永遠不會直接實例化,但總是通過模塊級功能logging.getLogger(name)」,但我有一個問題調試並想知道根本原因。python:區別logging.Logger和logging.getLogger
這裏是例如:
#!/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( 「測試」)這裏,日誌消息將不被打印。
如果我將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( 「測試」)和集記錄水平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")
似乎並不能解釋爲什麼使用Logger(「test」)而不是getLogger(「test」)時打印的消息。他們兩個都得到了日誌級別爲0的logging.Logger對象。 – vts
請參閱編輯,當我提交時沒有意識到它的一部分被切斷。 – ioneyed
感謝ioneyed,我看到檢查logger.getEffectiveLevel(),.Logger(「test」)後不會從任何記錄器繼承,而.getLogger(「test」)將從具有默認日誌級別的根記錄器繼承== 30。 – vts