记录setLevel,它如何工作

发布于 2021-01-29 17:23:03

日志记录方法文档中有以下示例:

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为forLogger和for的两倍StreamHandler

我了解ch.setLevel(logging.DEBUG)将为流处理程序设置调试级别。但是将级别设置为记录器有什么作用?这个水平反映在哪里?

我得到同样的控制台输出,如果我改变等级,例如,INFO无论对Logger或到StreamHandler

那是:

...........
logger.setLevel(logging.INFO)
............
ch.setLevel(logging.DEBUG)

在控制台中提供的输出与

...........
logger.setLevel(logging.DEBUG)
............
ch.setLevel(logging.INFO)
关注者
0
被浏览
39
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    它在那里可以进行微调(您可以有多个处理程序,并且每个处理程序可以设置不同的级别)—您不能安全地在处理程序上设置级别,这将导致它处理所有消息(也称为NOTSET级别),并保留级别过滤到记录器。

    记录器也是第一个基于级别过滤消息的记录器-如果将记录器设置为INFO,而所有处理程序都设置为DEBUG,则仍然不会在处理程序上收到DEBUG消息-
    记录器本身将拒绝它们。如果将记录器设置为DEBUG,但将所有处理程序都设置为INFO,则您也不会收到任何DEBUG消息-
    因为当记录器说“确定,请处理”时,处理程序会拒绝它(DEBUG <INFO)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看