Технически оба класса: Logger и Handler являются потомками Filterer.
Загляните в исходники.
class Filterer(object):
"""
A base class for loggers and handlers which allows them to share
common code.
"""
def __init__(self):
"""
Initialize the list of filters to be an empty list.
"""
self.filters = []
def addFilter(self, filter):
"""
Add the specified filter to this handler.
"""
if not (filter in self.filters):
self.filters.append(filter)
# ...
Вообще заглядывать в исходники куда полезнее для саморазвития, чем спрашивать.
Там видно, что любой фильтр может содержать вложенные фильтры.
Все вложенные фильтры должны вернуть True, чтобы фильтр вернул True.
def filter(self, record):
"""
Determine if a record is loggable by consulting all the filters.
The default is to allow the record to be logged; any filter can veto
this and the record is then dropped. Returns a zero value if a record
is to be dropped, else non-zero.
.. versionchanged:: 3.2
Allow filters to be just callables.
"""
rv = True
for f in self.filters:
if hasattr(f, 'filter'):
result = f.filter(record)
else:
result = f(record) # assume callable - will raise if not
if not result:
rv = False
break
return rv
То есть фильтры работают через логическое "И".
Ну и да, может.