Python 如何调整日志级别行为?
我已经试验了一段时间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
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也是一个很好的解决方案。非常感谢你。