日志过滤器
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 的配置方式