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