import logging; log = logging.getLogger('pvl.syslog.filter')
class SyslogFilter (object) :
"""
Filter syslog messages.
"""
def __init__ (self, prog=None) :
"""
prog - match tag (process name)
"""
self.prog = prog
def match_prog (self, prog) :
"""
Match given prog?
"""
# normalize
prog = prog.lower()
if prog.startswith('/') :
# base
prog = prog.split('/')[-1]
# match
if not prog :
# never matches non-tagged lines
return False
elif self.prog.endswith('*') :
# prefix match
return prog.startswith(self.prog[:-1])
else :
return prog == self.prog
def filter (self, item) :
"""
Match given item?
"""
if self.prog and not self.match_prog(item['prog']) :
log.debug("prog: %s: %r", self.prog, item['prog'])
else :
# ok
return True
def __call__ (self, items) :
for item in items:
if self.filter(item) :
yield item