即使设置了级别,Python日志记录模块也不会记录信息

时间:2017-11-03 04:07:20

标签: python python-3.x logging

我正在尝试做一些基本的日志记录。我正在做以下事情:

log = logging.getLogger('test')

log.error('test') # 'test' gets logged

log.info('test') # Nothing gets logged, as expected

log.setLevel(logging.INFO) # Now info should be logged, right?

log.info('test') # No output

log.setLevel(logging.INFO) # Getting desperate

log.info('test') # Still nothing

我缺少记录模块的哪个方面?

3 个答案:

答案 0 :(得分:7)

您忘记添加处理程序,即logging.basicConfig(),您可以检查以下代码是否适合您。

import logging
logging.basicConfig()
log = logging.getLogger('test')
log.setLevel(logging.INFO)
log.error('test')
log.info('test')

答案 1 :(得分:1)

您需要在使用之前配置日志记录,如下所示。你可以在python中精美地配置它。

logging.basicConfig(format='%(asctime)s %(name)25s %(lineno)4d %(levelname)8s: %(message)s', level=40)

上述语句将打印时间戳,文件名,行号,级别类型,消息

日志记录级别也可以在基本配置本身(40 = DEBUG)

期间设置

答案 2 :(得分:0)

不必致电basicConfig

但是,问题与处理程序有关(如@Mahesh Karia所指出)。

您会看到,如果您没有定义某些处理程序,那么您将依赖于已经为您“准备就绪”的内容,这会引起很多混乱。

检查:

您创建“测试”记录器

>>> log = logging.getLogger('test')

可打印警告消息,但即使将级别设置为INFO也不会打印INFO消息:

>>> log.warning('hi')
hi
>>> log.setLevel(logging.INFO)
>>> log.info('hi')
>>> 

(个人而言,我认为这是非常错误的行为)

可以通过操纵“处理程序”来“解决”。

您的“测试”记录器没有

>>> log.handlers
[]

“ root logger”也不是父母

>>> log.parent
<RootLogger root (WARNING)>
>>> log.parent.handlers
[]

但是,可以很容易地向根记录器添加一个处理程序

>>> log.parent.addHandler(logging.StreamHandler())

现在您的“测试”记录器“正常运行”:

>>> log.info('hi')
hi

PS。导入logging模块后,正在使用Python 3.8.2提示。