Python 记录setLevel,它是如何工作的
在示例中,有以下示例:Python 记录setLevel,它是如何工作的,python,logging,Python,Logging,在示例中,有以下示例: import logging # create logger logger = logging.getLogger('simple_example') logger.setLevel(logging.DEBUG) # create console handler and set level to debug ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # create formatter forma
import logging
# create logger
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
logger.addHandler(ch)
为什么我应该将级别设置为logging.DEBUG
两次,对于Logger
,对于StreamHandler
我知道ch.setLevel(logging.DEBUG)
将为流处理程序设置调试级别。但是,将液位设置为记录器的效果如何?这一水平反映在哪里
如果将级别更改为,例如,INFO
或Logger
或StreamHandler
,则会获得相同的控制台输出
即:
...........
logger.setLevel(logging.INFO)
............
ch.setLevel(logging.DEBUG)
在控制台中提供的输出与
...........
logger.setLevel(logging.DEBUG)
............
ch.setLevel(logging.INFO)
它用于微调(您可以有多个处理程序,每个处理程序可以设置不同的级别)-您可以安全地不在处理程序上设置级别,这将导致处理程序处理所有消息(也称为NOTSET level),并将级别筛选留给记录器
Logger也是第一个根据级别过滤消息的人-如果您将Logger设置为INFO,并将所有处理程序设置为DEBUG,您仍然不会收到处理程序上的调试消息-它们将被Logger本身拒绝。如果你设置了记录器去调试,但是所有的处理程序都是信息,你也不会收到任何调试消息——因为当记录器说“OK,处理这个”时,处理程序就会拒绝它(调试<信息)。
- 您可以构建记录器对象的层次结构。他们每个人都会 最初没有级别集(级别NOTSET)。有效水平 Logger对象是层次结构中设置的第一级 在到达根记录器的过程中(如果未设置任何级别,则可能未设置 设置)
- 记录器的有效级别仅用于确定是否在消息直接发送到记录器时启动操作
- 该操作首先是将消息传递给记录器的处理程序, 第二个(取决于传播标志的值),将其传递给祖先链的每个处理程序,而不考虑链中每个记录器的实际级别