日志过滤器

Logger 和 handler 都可以使用 Filter。看一下 Filter 的源码

class Filter(object):
    def __init__(self, name=''):
        self.name = name
        self.nlen = len(name)

    def filter(self, record):
        if self.nlen == 0:
            return True
        elif self.name == record.name:
            return True
        elif record.name.find(self.name, 0, self.nlen) != 0:
            return False
        return (record.name[self.nlen] == ".")

那么,实例化一个过滤器

ft = logging.Filter('com.gitbook')

很容易做出如下判断

logger name 过滤?
Yes
com Yes
com.gitbook No
com.gitbookxxx Yes
com.gitbook.xxx No

可以自定义 Filter 来根据 level 过滤日志,自定义的 Filter 可以是

  • logging.Filter 的子类
  • 有 filter(self, record) 方法的类
  • 有 filter 属性的类

例如,一个根据级别过滤日志的过滤器

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

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

不过,文件配置方式并不支持配置 filter,所以要想用 filter 就要用 dict 的配置方式

results matching ""

    No results matching ""