博览会:
使用3.6.3 Python中的日志记录模块存在一些被误解的问题。 首先,我使用标准配置创建2个日志,没有名称和级别= 30,这是logging.WARNING。
正如文档所说,日志对象没有处理程序,我将日志级别更改为10(logging.DEBUG),当我要使用INFO(级别= 20)打印日志时,首先,在级别10(信息级别下),信息不会记录,最后,日志没有任何处理程序,但https://docs.python.org/3/library/logging.html?highlight=logging#module-logging的文档说:
logging.basicConfig(** kwargs)¶:
通过创建日志记录系统的基本配置 StreamHandler使用默认格式化程序并将其添加到根目录 记录仪。函数debug(),info(),warning(),error()和 如果没有处理程序,critical()将自动调用basicConfig() 为根记录器定义。
所以,我的问题是,我做错了什么?这是为什么造成的?我不能实例化日志,将Root的级别设置为log.setLevel(logging.INFO)并按照我的做法制作log.info(“poo”)直到此问题?。
代码:
Python 3.6.3 (default, Oct 31 2017, 11:19:55)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import logging
In [2]: log1 = logging.getLogger()
In [3]: log2 = logging.getLogger()
In [4]: log1.level
Out[4]: 30
In [5]: log1.hasHandlers()
Out[5]: False
In [6]: log1.setLevel(10) ## logging.DEBUG == 10
In [7]: log1
Out[7]: <RootLogger root (DEBUG)>
In [8]: log2
Out[8]: <RootLogger root (DEBUG)>
In [9]: log1.info("asdad")
In [10]: log2.info("asdad")
In [11]: log1.hasHandlers()
Out[11]: False
In [12]: logging.basicConfig(level=20) # logging.INFO == 20
In [13]: log2
Out[13]: <RootLogger root (INFO)>
In [14]: log2.info("ASDADA")
INFO:root:ASDADA
In [15]: log1.hasHandlers()
Out[15]: True
In [16]: log1.handlers == log2.handlers
Out[16]: True
In [17]: logging.basicConfig(level=10) # logging.DEBUG == 10
In [18]: log2.info("ASDADA")
INFO:root:ASDADA
In [19]: log1
Out[19]: <RootLogger root (INFO)>
In [20]: log2
Out[20]: <RootLogger root (INFO)>
In [21]: log1.level
Out[21]: 20
更新:1
In [1]: import logging
In [2]: logging.getLogger().hasHandlers()
Out[2]: False
In [3]: logging.getLogger().level
Out[3]: 30
In [4]: logging.getLogger().info("papa")
In [5]: logging.getLogger().hasHandlers()
Out[5]: False
In [6]: logging.info("foo")
In [7]: logging.getLogger().hasHandlers()
Out[7]: True
更新:2
In [2]: import logging
In [3]: log = logging.getLogger()
In [4]: log.info("poo")
In [5]: log.warning("poo")
poo
In [6]: log.setLevel(logging.INFO)
In [7]: log.info("poo")
答案 0 :(得分:1)
我认为引用的文件不够明确。当您单击文档网页上列出的功能时,它们会链接到logging.info()
等功能。您正在使用具有相同名称的记录器对象方法。
>>> import logging
>>> logging.getLogger().hasHandlers()
False
>>> logging.warning("TEST")
WARNING:root:TEST
>>> logging.getLogger().hasHandlers()
True