Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何调整日志级别行为?_Python_Logging - Fatal编程技术网

Python 如何调整日志级别行为?

Python 如何调整日志级别行为?,python,logging,Python,Logging,我已经试验了一段时间Python的日志模块。我的大部分基础知识都很有效。然而,我在想要控制记录器的级别的地方撞到了一堵墙 下面是我试图实现的日志记录行为的一个表示: if verbosityState == 0: # Total silence elif verbosityState == 1: # Display only INFO, ERROR, CRITICAL elif verbosityState == 2: # Display INFO, DEBUG, ERR

我已经试验了一段时间Python的日志模块。我的大部分基础知识都很有效。然而,我在想要控制记录器的级别的地方撞到了一堵墙

下面是我试图实现的日志记录行为的一个表示:

if verbosityState == 0:
    # Total silence
elif verbosityState == 1:
    # Display only INFO, ERROR, CRITICAL
elif verbosityState == 2:
    # Display INFO, DEBUG, ERROR, CRITICAL
elif verbosityState > 2:
    # Display INFO, DEBUG, ERROR, CRITICAL, WARNING
else:
   # Total silence
我在stackoverflow上找到了以下解决方案,它涉及到继承FILTER类和创建自定义筛选器。不幸的是,我没能使它适应我的情况

你能帮我做这个吗


谢谢。

您可以使用自定义的
过滤器,就像您链接到的答案一样:

class CustomFilter(logging.Filter):
    def __init__(self, state):
        self.state = state

    def filter(self, record):
        if self.state == 1:
            return record.levelno in [logging.INFO, logging.ERROR, 
                                      logging.CRITICAL]
        elif self.state == 2:
            return record.levelno in [logging.INFO, logging.DEBUG, 
                                      logging.ERROR, logging.CRITICAL]
        elif self.state > 2:
            return record.levelno in [logging.INFO, logging.DEBUG, 
                                      logging.ERROR, logging.CRITICAL, 
                                      logging.WARNING]
        else:
            return False


h1 = logging.StreamHandler(sys.stdout)
logger = logging.getLogger("my.logger")
logger.setLevel(logging.DEBUG)
print("No logging:")
f1 = CustomFilter(0)
h1.addFilter(f1)
logger.addHandler(h1)
logger.info("info")
logger.debug("debug")
logger.error("error")
logger.warning("warning")
logger.critical("critical")
print ("Level 1:")
h1.removeFilter(f1)
f1 = CustomFilter(1)
h1.addFilter(f1)
logger.addHandler(h1)
logger.info("info")
logger.debug("debug")
logger.error("error")
logger.warning("warning")
logger.critical("critical")
print("Level 2:")
h1.removeFilter(f1)
logger.removeHandler(h1)
f1 = CustomFilter(2)
h1.addFilter(f1)
logger.addHandler(h1)
logger.info("info")
logger.debug("debug")
logger.error("error")
logger.warning("warning")
logger.critical("critical")
print("Level 3:")
h1.removeFilter(f1)
logger.removeHandler(h1)
f1 = CustomFilter(3)
h1.addFilter(f1)
logger.addHandler(h1)
logger.info("info")
logger.debug("debug")
logger.error("error")
logger.warning("warning")
logger.critical("critical")
输出:

No logging:
Level 1:
info
error
critical
Level 2:
info
debug
error
critical
Level 3:
info
debug
error
warning
critical

从文档中,您只需导入日志并实例化Logger类(我假设您这样做了),然后使用Logger.setLevel(lvl)@gkusner,谢谢。是的,但是使用默认设置,您不能有非默认行为。通过级别信息,您可以获得信息、警告、错误和严重信息。通过调试,您可以获得所有信息。有了警告,你会得到警告,错误,严重。我正在尝试添加和删除级别组件。您需要准确显示您尝试的内容-“我无法调整它”没有提供足够的信息。嗯,我尝试在链接解决方案中调整类,就像dank那样,但我的逻辑是错误的,我忘了removeFilter方法,所以我一直在覆盖我的筛选器。谢谢,这很有效。我仍然不太习惯类继承和重写方法。[]
中的
return record.levelno也是一个很好的解决方案。非常感谢你。