必须首先调用logging模块的basicConfig函数

2020年5月11日 / 47次阅读 / Last Modified 2020年5月24日
logging模块

python标准的logging模块,有一个basicConfig函数,这个函数有个特点,必须首先调用。后面调用的都无效。

如果我们要改变logging模块的默认配置,就需要basicConfig函数的支持,而且这个函数必须要在所有debug,info,warning,errir,critical函数之前调用,如果在后面,此函数就无效了。

python官方的教程里面是这样写的:

The call to basicConfig() should come before any calls to debug(), info() etc. As it’s intended as a one-off simple configuration facility, only the first call will actually do anything: subsequent calls are effectively no-ops.

我们可以试一下,logging模块默认的level是warning:

>>> import logging
>>> logging.warning('pynote.net')
WARNING:root:pynote.net
>>> logging.basicConfig(level=logging.ERROR)
>>> logging.warning('pynote.net')
WARNING:root:pynote.net

先记录了一条warning级别的日志,然后调用basicConfig将level设置为error,然后在记录warning级别的日志,依然有效,说明basicConfig函数已经无效了。

如果先调用basicConfig函数,就OK:

>>> import logging
>>> logging.basicConfig(level=logging.ERROR)
>>> logging.warning('pynote.net')
>>> logging.error('pynote.net')
ERROR:root:pynote.net

python官方教程推荐在命令行将level作为一个用户配置的参数,我觉得这个思路很nice。

-- EOF --

本文链接:https://www.pynote.net/archives/1909

留言区

《必须首先调用logging模块的basicConfig函数》有4条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    basicConfig函数仅仅是用来配置root logger的,如果不使用root logger,可以不用调用此函数。 [回复]

  • 麦新杰

    logging默认是想stderr打印输出,因此命令行如果只重定向了stdout,就会没用的。初始化的时候可以设置。 [回复]

  • 麦新杰

    要学习logging模块的源代码了。。。以及python其它标准库的源代码,了解这些模块的运行机制。 [回复]

  • 麦新杰

    如果在多个模块(.py)文件中都使用root logger,要注意在程序入口的地方使用basicConfig修改配置,在其它.py文件中如果也使用basicConfig函数将导致无效。此时只能使用不同的logger。 [回复]


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top