As the logger.setLevel医生说:
创建记录器时,级别设置为 NOTSET(这会导致当记录器是根记录器时处理所有消息,或者当记录器是非根记录器时将委托给父记录器)。请注意,根记录器是使用“警告”级别创建的。
所以我想如果我创建一个根记录器,级别为 NOTSET,则会显示调试和信息日志。
使用 basicConfig 将根记录器的级别设置为 NOTSET 的代码是正确的:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
logging.basicConfig(level=logging.NOTSET)
log = logging.getLogger()
log.debug('debug')
log.info('info')
log.warning('warning')
log.error('error')
log.critical('critical')
输出是:
DEBUG:root:debug
INFO:root:info
WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical
但是如果我创建一个根记录器,并向其添加具有 NOTSET 级别的处理程序,例如:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
log = logging.getLogger()
hd = logging.StreamHandler()
hd.setLevel(logging.NOTSET)
log.addHandler(hd)
log.debug('debug')
log.info('info')
log.warning('warning')
log.error('error')
log.critical('critical')
输出是:
warning
error
critical
但我认为它也会输出调试和信息消息。
好吧,我误解了Logger's level
and Handler's Level
,在文档中:
setLevel() 方法,就像在记录器对象中一样,指定将分派到适当目的地的最低严重性。为什么有两个 setLevel() 方法?记录器中设置的级别确定它将传递给其处理程序的消息的严重性。每个处理程序中设置的级别确定该处理程序将发送哪些消息。
如果我将代码更改为这样,就可以了:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
log = logging.getLogger()
log.setLevel(logging.NOTSET) # Set Logger's level to NOTSET, default is WARNING
#print "Logger's Level: ", log.level
hd = logging.StreamHandler()
hd.setLevel(logging.NOTSET)
#print "Handler's Level: ", hd.level
log.addHandler(hd)
log.debug('debug')
log.info('info')
log.warning('warning')
log.error('error')
log.critical('critical')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)