Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么是Python';s的日志记录包忽略了某些级别?_Python_Logging - Fatal编程技术网

为什么是Python';s的日志记录包忽略了某些级别?

为什么是Python';s的日志记录包忽略了某些级别?,python,logging,Python,Logging,展览: 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

展览:

    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  
在3.6.3 Python中使用日志模块存在一些误解问题。 首先,我使用标准配置创建了两个日志,没有名称和级别=30,即logging.WARNING

正如文档所说,日志对象没有处理程序,我将日志级别更改为10(logging.DEBUG),当我要打印| log with INFO(级别=20)时,首先,在级别10(低于信息级别)中,信息不会记录,最后,日志没有任何处理程序,但的文档说:

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  
更新: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")

我认为引用的文件不够清楚。单击文档网页上列出的函数时,它们会链接到诸如
logging.info()
之类的函数。您使用的是具有相同名称的记录器对象方法

>>> import logging
>>> logging.getLogger().hasHandlers()
False
>>> logging.warning("TEST")
WARNING:root:TEST
>>> logging.getLogger().hasHandlers()
True

默认情况下,根级别为logging.WARNING(30),因此具有相同或更高级别的任何内容都将像UPDATE:1中那样打印,但我要问的是,当我将级别更改为比logging.WARNING更小的级别时,如果没有以前的basicConfig,setLevel方法不适用于Logger对象。我在UPDATE:2中看到了类似的情况,调用logging.info方法就可以了,但我想要的是一群同名的记录器,它们共享它们的配置,但当我使用记录器对象时,情况是:@PurpleZooL我恐怕不完全理解您的评论。现在,您的问题中有许多行代码,请说明哪条语句的行为与您预期的不同。@PurpleZooL如果您说“我想要的是一群同名的记录器”。这没有道理,因为伐木工人都是单身。您不能使用
logging.getLogger(name)
创建多个记录器,因为对于给定的名称,您将始终从
getLogger()
返回相同的
Logger
实例。