【问题标题】:set a log to min and max level, as to exclude errors将日志设置为最小和最大级别,以排除错误
【发布时间】:2014-04-19 21:14:48
【问题描述】:

假设我想要多个处理程序,但我不希望 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.DEBUG 到并包括logging.WARNING 的所有内容,但不包括logging.ERROR。这可能吗?

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    您可以指定自定义logging filter 以过滤掉您不需要的级别的记录:

    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 级别的消息。

    另见:

    希望这是你需要的。

    【讨论】:

      猜你喜欢
      • 2018-06-28
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多