如何调整日志级别行为?

2024-05-16 01:49:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试用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

我找到了下面的解决方案,hereon stackoverflow,它涉及到继承FILTER类和创建自定义过滤器。不幸的是,我不能适应我的情况。你知道吗

你能帮我做这个吗?你知道吗

谢谢。你知道吗


Tags: 模块debuginfoifdisplay记录水平error
1条回答
网友
1楼 · 发布于 2024-05-16 01:49:44

您可以使用自定义的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

相关问题 更多 >