equal
deleted
inserted
replaced
|
1 import logging; log = logging.getLogger('pvl.syslog.filter') |
|
2 |
|
3 class SyslogFilter (object) : |
|
4 """ |
|
5 Filter syslog messages. |
|
6 """ |
|
7 |
|
8 def __init__ (self, prog=None) : |
|
9 """ |
|
10 prog - match tag (process name) |
|
11 """ |
|
12 |
|
13 self.prog = prog |
|
14 |
|
15 def match_prog (self, prog) : |
|
16 """ |
|
17 Match given prog? |
|
18 """ |
|
19 |
|
20 # normalize |
|
21 prog = prog.lower() |
|
22 |
|
23 if prog.startswith('/') : |
|
24 # base |
|
25 prog = prog.split('/')[-1] |
|
26 |
|
27 # match |
|
28 if not prog : |
|
29 # never matches non-tagged lines |
|
30 return False |
|
31 |
|
32 elif self.prog.endswith('*') : |
|
33 # prefix match |
|
34 return prog.startswith(self.prog[:-1]) |
|
35 |
|
36 else : |
|
37 return prog == self.prog |
|
38 |
|
39 def filter (self, item) : |
|
40 """ |
|
41 Match given item? |
|
42 """ |
|
43 |
|
44 if self.prog and not self.match_prog(item['prog']) : |
|
45 log.debug("prog: %s: %r", self.prog, item['prog']) |
|
46 |
|
47 else : |
|
48 # ok |
|
49 return True |
|
50 |
|
51 def __call__ (self, items) : |
|
52 for item in items: |
|
53 if self.filter(item) : |
|
54 yield item |
|
55 |