如何在python日志记录配置文件(logging.conf)中添加过滤器
是否可以在日志记录配置文件中添加/使用过滤器? 例如,以下代码是否有任何等效设置如何在python日志记录配置文件(logging.conf)中添加过滤器,python,logging,Python,Logging,是否可以在日志记录配置文件中添加/使用过滤器? 例如,以下代码是否有任何等效设置 import logging # Set up loggers and handlers. # ... class LevelFilter(logging.Filter): def __init__(self, level): self.level = level def filter(self, record): ret
import logging
# Set up loggers and handlers.
# ...
class LevelFilter(logging.Filter):
def __init__(self, level):
self.level = level
def filter(self, record):
return record.levelno == self.level
logFileHandler.addFilter(LevelFilter(logging.DEBUG))
对于logging.conf中的处理程序
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=format_01
args=(sys.stdout,)
我们可以在配置文件(logging.conf)中为上述python代码编写日志过滤器吗?(python代码只是一个例子)搜索之后,我在官方文档中找到了答案,上面写着 logging.conf格式为
[loggers]
keys=root,log02,log03,log04,log05,log06,log07
[handlers]
keys=hand01,hand02,hand03,hand04,hand05,hand06,hand07,hand08,hand09
[formatters]
keys=form01,form02,form03,form04,form05,form06,form07,form08,form09
过滤器没有如下配置
[filters]
keys=filter01,filter02
如果你愿意,我用Json做了一个例子。应该可以通过以下逻辑轻松切换到您的格式:) 当您初始化记录器时,类似于:
class RemoveLevelFilter(object):
def __init__(self, levelToSkip):
self.level = levelToSkip
def filter(self, record):
return self.getLogLevelName(record.levelno) != self.level
enter code here
def getLogLevelName(self, levelno):
switcher = {
10: "DEBUG",
20: "INFO",
30: "WARNING",
40: "ERROR",
50: "CRITICAL"
}
return switcher.get(levelno, "INVALID")
with open("logging.json", "r", encoding="utf-8") as fd:
logging.config.dictConfig(json.load(fd))
logger = logging.getLogger(__name__)
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
注:奇怪,我的代码就是这样,我知道。是为了更复杂一点的东西,我删掉了
参考资料:
class RemoveLevelFilter(object):
def __init__(self, levelToSkip):
self.level = levelToSkip
def filter(self, record):
return self.getLogLevelName(record.levelno) != self.level
enter code here
def getLogLevelName(self, levelno):
switcher = {
10: "DEBUG",
20: "INFO",
30: "WARNING",
40: "ERROR",
50: "CRITICAL"
}
return switcher.get(levelno, "INVALID")
with open("logging.json", "r", encoding="utf-8") as fd:
logging.config.dictConfig(json.load(fd))
logger = logging.getLogger(__name__)
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')