python:logging.getLogger和logger的父子关系

271 阅读1分钟

参考网址

www.pynote.net/archives/19…

logger对象的创建,以及层级关系(父子关系)

我们用logging库包的getLogger方法来创建logger对象,
然后通过logger对象的名字,我们可以实现不同logger对象之间的层次关系,或是父子关系。

图片.png

从上图可以知道,如果getLogger这个函数如果不带参数(没有入参,没有指定logger对象的名称),返回的就是默认的root logger.

层次化的实现,就是通过在名称上加点(.)

>>> log_1 = logging.getLogger('1')  # 创建一个名称为'1'的logger对象
>>> log_12 = logging.getLogger('1.2')  # 创建一个名称为'2'的logger对象,但它是在'1'下面的,有父子关系
>>> log_12.parent  
<Logger 1 (WARNING)>
>>> log_1.parent
<RootLogger root (WARNING)>
层次化的logger有个特性,子logger的日志默认要传递给父节点处理,会一直传递下去直到root。
默认logger.propagate=True,这个开始用来控制传递。

关于日志传递,我看网上有很多人都发现这个特性很容易导致重复记录。
我想说另一个细节,传递的时候,是直接传递给父logger的handler,而handler的默认level是NOTSET。