2020年5月11日 / 475次阅读 / 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条留言
前一篇:python是解释型语言,为啥还要编译?
后一篇:Template Strings
©Copyright 麦新杰 Since 2019 Python笔记
basicConfig函数仅仅是用来配置root logger的,如果不使用root logger,可以不用调用此函数。 [ ]
logging默认是想stderr打印输出,因此命令行如果只重定向了stdout,就会没用的。初始化的时候可以设置。 [ ]
要学习logging模块的源代码了。。。以及python其它标准库的源代码,了解这些模块的运行机制。 [ ]
如果在多个模块(.py)文件中都使用root logger,要注意在程序入口的地方使用basicConfig修改配置,在其它.py文件中如果也使用basicConfig函数将导致无效。此时只能使用不同的logger。 [ ]