设置日志的最小和最大级别,以排除错误

3 投票
1 回答
1512 浏览
提问于 2025-04-18 03:25

假设我想设置几个处理器,但我不希望logging.ERROR级别的消息出现在除了logs/error.log以外的任何文件中。

formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s', datefmt='%m/%d %H:%M:%S')

handler = RotatingFileHandler('logs/debug.log', maxBytes=100000, backupCount=1)
handler.setLevel(logging.DEBUG)
handler.setFormatter(formatter)

error_handler = RotatingFileHandler('logs/error.log', maxBytes=100000, backupCount=1)
error_handler.setFormatter(formatter)
error_handler.setLevel(logging.ERROR)

app.logger.addHandler(handler)
app.logger.addHandler(error_handler)

所以我想要一个处理器来处理从logging.DEBUGlogging.WARNING的所有消息,但不包括logging.ERROR。这样做可以吗?

1 个回答

4

你可以设置一个自定义的日志过滤器,来过滤掉你不需要的日志记录。

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

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

然后,你可以通过addFilter()把这个过滤器添加到处理器中:

handler = RotatingFileHandler('logs/debug.log', maxBytes=100000, backupCount=1)
handler.setLevel(logging.DEBUG)
handler.setFormatter(formatter)
handler.addFilter(LevelFilter(logging.ERROR))

这样一来,你就不会在debug.log文件中看到ERROR级别的消息了。

另外,你可以查看:

希望这些信息对你有帮助。

撰写回答