python logging继承关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python logging继承关系相关的知识,希望对你有一定的参考价值。

参考技术A 这篇文章主要解析python logging模块不同logger间日志级别的继承关系,以及日志输出的机制。

在python的logging模块中,通过 logging.getLogger() 函数可以获取到指定的logger,如果没有指定参数, 那么返回的是root logger. 通过指定不同的logger名称,这个函数可以返回指定的logger.这里,logger名字 本身体现了logger的继承关系,它通过"."分隔父logger和子logger,可以存在很多个".",他们一路继承下来。

如"a.b"这个logger存在一个父logger"a", 而"a"则从root logger继承而来。如下图所示:

每个logger下面可能存在0个或多个handler,handler实现日志的输出,每个handler对应一个输出目标。 通过配置多个handler,可以实现同时输出到文件,控制台的功能。 同时,每个handler可以定制日志级别,从而使得某些日志级别可以只输出到文件中,而不输出到控制台。

每个logger都可以设置日志级别,如果没有设置,默认是NOSET。当logger的日志级别是NOSET时,它会按照继承关系向上层获取日志级别, 直到日志级别不是NOSET,或达到root logger为止。如以上关系,

这个机制在 官方文档setLevel 中有详细介绍。

logger中,有一个字段 propagate ,这个字段用于控制是否 继承父logger的handler,默认是继承。

当这个选项打开时,logger除了将日志写入自身的handler外,还会将日志写入祖先的handler中。

假设我们往a.b这个logger写入一条日志,其过程如下:

这里需要注意的是,logger的日志级别用于在入口处过滤,handler用于出口处过滤,在propagate的时候,已经过了输入阶段,到达输出阶段, 不需要再判断上层logger的日志级别,只判断handler的级别是否满足。

转自: https://lisongmin.github.io/python-logging-inherit/

python异常类继承关系

https://docs.python.org/3/library/exceptions.html#exception-hierarchy

 

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StopAsyncIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
           +-- ModuleNotFoundError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      |    +-- RecursionError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning

 

以上是关于python logging继承关系的主要内容,如果未能解决你的问题,请参考以下文章

python异常类继承关系

Python 继承关系

python异常类继承关系

python异常类继承关系

python--继承关系

selenium之python源码解读-webdriver继承关系