logging setLevel,它是如何工作的
·
问题:logging setLevel,它是如何工作的
在日志记录方法文档中有以下示例:
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)
解答
它用于微调(您可以有多个处理程序,并且每个处理程序可以设置不同的级别) - 您可以安全地不在处理程序上设置级别,这将导致它处理所有消息(a.k.a. NOTSET 级别),并离开级别过滤给记录器。
Logger 也是第一个根据级别过滤消息的——如果你将 logger 设置为 INFO,并且将所有处理程序设置为 DEBUG,你仍然不会在处理程序上收到 DEBUG 消息——它们将被 logger 本身拒绝。如果您将 logger 设置为 DEBUG,但将所有处理程序设置为 INFO,您也不会收到任何 DEBUG 消息——因为当 logger 说“好的,处理这个”时,处理程序拒绝它(DEBUG < INFO)。
更多推荐

所有评论(0)