1
2
3
4
5
6 import os, sys
7
8
9 from twisted.python import log
10
11 LOG_UNSET = 0
12 LOG_DEBUG = 10
13 LOG_INFO = 20
14 LOG_WARNING = 30
15 LOG_ERROR = 40
16 LOG_CRITICAL = 50
17 LOG_NONE = 100
18
19 log_levels = { 'info': LOG_INFO,
20 'debug': LOG_DEBUG,
21 'warning': LOG_WARNING,
22 'error': LOG_ERROR,
23 'critical': LOG_CRITICAL,
24 'none': LOG_NONE}
25
27 """ a singleton LOG class
28 """
29
31 obj = getattr(cls,'_instance_',None)
32 if obj is not None:
33 return obj
34 else:
35 obj = super(_Logger, cls).__new__(cls, *args, **kwargs)
36 cls._instance_ = obj
37
38
39
40
41
42
43 obj.feeds = {}
44 obj.master_level = None
45 return obj
46
48 """ a LOG feed registers with us """
49 if not self.feeds.has_key(name):
50 if self.master_level:
51 level = self.master_level
52 self.feeds[name] = {'active':True,'level':level}
53
60
61 - def send(self, name, level, *args):
62 try:
63 if self.feeds[name]['active'] == False:
64 return
65 if level >= self.feeds[name]['level']:
66 a = []
67 for i in args:
68 if isinstance(i,unicode):
69 i = i.encode('ascii', 'ignore')
70 else:
71 i = str(i)
72 a.append(i)
73 msg = ' '.join(a)
74 log.msg('%s: %s' % (name, msg))
75 except KeyError:
76 log.msg("Logger error, feed %s not found" % name)
77
79 try:
80 self.feeds[name]['active'] = True
81 except KeyError:
82 self.feeds[name] = {'active':True,'level':LOG_DEBUG}
83
85 try:
86 self.feeds[name]['active'] = False
87 except KeyError:
88 self.feeds[name] = {'active':False,'level':LOG_DEBUG}
89
91 try:
92 self.feeds[name]['level'] = level
93 except KeyError:
94 self.feeds[name] = {'active':False,'level':level}
95
97 try:
98 return self.feeds[name]['level']
99 except KeyError:
100 return None
101
103 self.master_level = level
104 for feed in self.feeds.values():
105 feed['level'] = level
106
108
112
115
116 - def send(self, level, *args):
118
119 - def msg(self, *args):
121
122 - def info(self, *args):
124
127
130
133
136
141
146
156
161
169
174
179
187
188 - def overwrite(self,name,level=None,active=None):
196
198 return self.log.feeds()
199
200 if __name__ == '__main__':
201
202 from twisted.internet import reactor
203
205 l1 = Logger('Test 1')
206 l1.send( 'Dies', 'ist', 'ein', 'Send', 'Test')
207 l1.info( 'Dies', 'ist', 'ein', 'Info', 'Test')
208
209 l2 = Logger('Test 2')
210 l2.info( 'Dies', 'ist', 'ein', 'Info', 'Test')
211
212 l3 = Logger('Test 3')
213 l3.error( 'Dies', 'ist', 'ein', 'Error', 'Test')
214 l2.disable(name='Test 1')
215
216 l1.info( 'Dies', 'ist', 'ein', 'Info', 'Test')
217
218 l2.enable(name='Test 1')
219
220 l1.info( 'Dies', 'ist', 'ein', 'Info', 'Test')
221
222 l3.set_level(name='Test 1',level=LOG_ERROR)
223
224 l1.info( 'Dies', 'ist', 'ein', 'Info', 'Test')
225 l1.error( 'Dies', 'ist', 'ein', 'Error', 'Test')
226
227 reactor.callWhenRunning( test1)
228
229 reactor.run()
230