#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import logging
#==============================================================================
[docs]class Whitelist(logging.Filter):
"""
Filter the log by name.
>>> filt = Whitelist('muon', 'tau')
>>> filt.filter(LogRecord('muon'))
True
>>> filt.filter(LogRecord('tau.h1'))
True
>>> filt.filter(LogRecord('123'))
False
"""
[docs] def __init__(self, *whitelist):
self.whitelist = [logging.Filter(name) for name in whitelist]
[docs] def filter(self, record):
return any(f.filter(record) for f in self.whitelist)
[docs]class Blacklist(Whitelist):
"""
>>> filt = Blacklist('PythonCK')
>>> filt.filter(LogRecord('muon'))
True
>>> filt.filter(LogRecord('PythonCK.logging'))
False
"""
[docs] def filter(self, record):
return not Whitelist.filter(self, record)
[docs]class FuncFileNameRegexFilter(logging.Filter):
"""
Valid if re.search returns non-null.
>>> filt = FuncFileNameRegexFilter(r'tauh[13]')
>>> print(filt)
FuncFileNameRegexFilter: tauh[13]
>>> filt.filter(LogRecord('tauh1'))
True
>>> filt.filter(LogRecord('tauh3'))
True
>>> filt.filter(LogRecord('taumu', func=func0))
False
"""
[docs] def __init__(self, pattern):
self._pattern = pattern
[docs] def __str__(self):
return 'FuncFileNameRegexFilter: %s'%self._pattern
[docs] def filter(self, record):
## At current impl, return True if found in any of these.
queues = [record.name]
if record.filename:
queues.append(str(record.filename))
if record.funcName:
queues.append(str(record.funcName))
return any(bool(re.search(self._pattern, text)) for text in queues if text)