Фильтры#

Фильтры можно применять к logger или к handler

Примечание

LogRecord attributes

class LevelFilter(logging.Filter):
    def __init__(self, level):
        self.level = level

    def filter(self, record):
        return record.levelno == self.level


log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
log.addFilter(LevelFilter(logging.DEBUG))

logfile = logging.FileHandler("logfile3.log")
logfile.setLevel(logging.DEBUG)
formatter = logging.Formatter("{asctime} - {name} - {levelname} - {message}", style="{")
logfile.setFormatter(formatter)

log.addHandler(logfile)

Handler Filter#

class LevelFilter(logging.Filter):
    def __init__(self, level):
        self.level = level

    def filter(self, record):
        return record.levelno == self.level


log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)

logfile = logging.FileHandler("logfile3.log")
logfile.setLevel(logging.DEBUG)
logfile.addFilter(LevelFilter(logging.DEBUG))
logfile.addFilter(MessageFilter("test"))

formatter = logging.Formatter("{asctime} - {name} - {levelname} - {message}", style="{")
logfile.setFormatter(formatter)

log.addHandler(logfile)

Использование фильтра для добавления информации в запись#

class AddIPFilter(logging.Filter):
    def filter(self, record):
        match = re.search(r"\d+\.\d+\.\d+\.\d+", record.msg)
        if match:
            record.ip = match.group()
        else:
            record.ip = None
        return True