2
我想讓我的項目變得更容易調試我的代碼。我討厭添加和刪除打印或調試語句(爲什麼不把它們留在?)問題是輸出變得混亂閱讀。我試圖能夠設置不同文件和級別的日誌記錄,所以我可以通過logging.conf配置文件打開或關閉它。在Python的logging.conf中設置日誌記錄級別
這裏是我的代碼:
import logging.config
logging.config.fileConfig('logging.conf')
if __name__ == "__main__":
one = logging.getLogger("oneLogger")
two = logging.getLogger("twoLogger")
one.debug("debug on one")
one.info("info on one")
one.warn("warn on one")
one.error("error on one")
one.critical("critical on one")
two.debug("debug on two")
two.info("info on two")
two.warn("warn on two")
two.error("error on two")
two.critical("critical on two")
這裏是我的logging.conf文件:
[loggers]
keys=root,oneLogger, twoLogger
[handlers]
keys=rootHandler, oneHandler, twoHandler
[formatters]
keys=rootFormatter,oneFormatter, twoFormatter
[logger_root]
level=DEBUG
handlers=rootHandler
[logger_oneLogger]
level=DEBUG
handlers=oneHandler
qualname=main
propagate=1
[logger_twoLogger]
level=CRITICAL
handlers=twoHandler
qualname=main
propagate=1
[handler_rootHandler]
class=StreamHandler
formatter=rootFormatter
args=(sys.stdout,)
[handler_oneHandler]
class=StreamHandler
formatter=oneFormatter
args=(sys.stdout,)
[handler_twoHandler]
class=StreamHandler
formatter=twoFormatter
args=(sys.stdout,)
[formatter_rootFormatter]
format=Root: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
[formatter_oneFormatter]
format=One: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
[formatter_twoFormatter]
format=Two: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
我本來期望的輸出:
One: 2016-12-22 16:36:32,414 - one - DEBUG - debug on one
One: 2016-12-22 16:36:32,414 - one - INFO - info on one
One: 2016-12-22 16:36:32,415 - one - WARNING - warn on one
One: 2016-12-22 16:36:32,417 - one - ERROR - error on one
One: 2016-12-22 16:36:32,417 - one - CRITICAL - critical on one
Two: 2016-12-22 16:36:32,421 - two - CRITICAL - critical on two
相反,我得到這個:
Root: 2016-12-22 16:36:32,414 - one - DEBUG - debug on one
Root: 2016-12-22 16:36:32,414 - one - INFO - info on one
Root: 2016-12-22 16:36:32,415 - one - WARNING - warn on one
Root: 2016-12-22 16:36:32,417 - one - ERROR - error on one
Root: 2016-12-22 16:36:32,417 - one - CRITICAL - critical on one
Root: 2016-12-22 16:36:32,418 - two - DEBUG - debug on two
Root: 2016-12-22 16:36:32,418 - two - INFO - info on two
Root: 2016-12-22 16:36:32,420 - two - WARNING - warn on two
Root: 2016-12-22 16:36:32,421 - two - ERROR - error on two
Root: 2016-12-22 16:36:32,421 - two - CRITICAL - critical on two
我在期待那個記錄器將被限制爲只有CRITICAL日誌,並且記錄器可以接受所有的日誌。相反,我很驚訝地看到根記錄器處理了所有的日誌。
我在做什麼/假設錯誤?
什麼叫'logging.getLogger( 「one.oneLogger」)'和'logging.getLogger( 「兩化」 之間的區別)'? – cphlewis
在logging.conf文件中,我有「oneHandler」(qualname是「one」)設置來記錄警告消息和上面的和「twoLogger」(qualname是「2」)設置爲只記錄關鍵消息任何記錄器匹配根將使用conf文件中的記錄器名稱。如果我要在配置文件中添加另一個具有「one.oneLogger」質量名稱的記錄器,則日誌記錄子系統將在「one」之前匹配它並使用其級別(和處理程序) – jordanthompson