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日志记录配置文件(logging.conf)中添加过滤器_Python_Logging - Fatal编程技术网

如何在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')
注:奇怪,我的代码就是这样,我知道。是为了更复杂一点的东西,我删掉了

参考资料:


可能重复@AbijithMg这不是重复,我以这段代码为例。可能是我的问题不清楚。我的问题是,“是否可以使用日志配置文件(logging.conf)中的过滤器作为处理程序”。
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')