Package elisa :: Package extern :: Package coherence :: Module logger
[hide private]
[frames] | no frames]

Source Code for Module elisa.extern.coherence.logger

  1  # Licensed under the MIT license 
  2  # http://opensource.org/licenses/mit-license.php 
  3   
  4  # Copyright 2006, Frank Scholz <coherence@beebits.net> 
  5   
  6  import os, sys 
  7  #import logging 
  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   
26 -class _Logger(object):
27 """ a singleton LOG class 28 """ 29
30 - def __new__(cls, *args, **kwargs):
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 #logging.basicConfig(level=logging.INFO, 39 # format='%(asctime)s %(message)s', 40 # datefmt='%d %b %Y %H:%M:%S',) 41 #obj.log = logging.getLogger('.') 42 #obj.log.setLevel(logging.INFO) 43 obj.feeds = {} 44 obj.master_level = None 45 return obj
46
47 - def __init__(self,name='',level=LOG_DEBUG):
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
54 - def start_logging(self, logfile=None):
55 if logfile is not None: 56 observer = log.FileLogObserver(open(logfile, 'w')) 57 else: 58 observer = log.FileLogObserver(sys.stdout) 59 log.startLoggingWithObserver(observer.emit, setStdout=0)
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
78 - def enable(self, name):
79 try: 80 self.feeds[name]['active'] = True 81 except KeyError: 82 self.feeds[name] = {'active':True,'level':LOG_DEBUG}
83
84 - def disable(self, name):
85 try: 86 self.feeds[name]['active'] = False 87 except KeyError: 88 self.feeds[name] = {'active':False,'level':LOG_DEBUG}
89
90 - def set_level(self, name, level):
91 try: 92 self.feeds[name]['level'] = level 93 except KeyError: 94 self.feeds[name] = {'active':False,'level':level}
95
96 - def get_level(self, name):
97 try: 98 return self.feeds[name]['level'] 99 except KeyError: 100 return None
101
102 - def set_master_level(self,level):
103 self.master_level = level 104 for feed in self.feeds.values(): 105 feed['level'] = level
106
107 -class Logger:
108
109 - def __init__(self, name='', level=LOG_DEBUG):
110 self.name = name 111 self.log = _Logger(name,level)
112
113 - def start_logging(self, logfile=None):
114 self.log.start_logging(logfile)
115
116 - def send(self, level, *args):
117 self.log.send( self.name, LOG_UNSET, *args)
118
119 - def msg(self, *args):
120 self.log.send( self.name, LOG_DEBUG, *args)
121
122 - def info(self, *args):
123 self.log.send( self.name, LOG_INFO, *args)
124
125 - def debug(self, *args):
126 self.log.send( self.name, LOG_DEBUG, *args)
127
128 - def warning(self, *args):
129 self.log.send( self.name, LOG_WARNING, *args)
130
131 - def error(self, *args):
132 self.log.send( self.name, LOG_ERROR, *args)
133
134 - def critical(self, *args):
135 self.log.send( self.name, LOG_CRITICAL, *args)
136
137 - def enable(self, name=None):
138 if name == None: 139 name=self.name 140 self.log.enable(name)
141
142 - def disable(self, name=None):
143 if name == None: 144 name=self.name 145 self.log.disable(name)
146
147 - def set_level(self, name=None, level=LOG_INFO):
148 if name == None: 149 name=self.name 150 if isinstance( level, str): 151 try: 152 level=log_levels[level] 153 except: 154 level=LOG_INFO 155 self.log.set_level(name,level)
156
157 - def get_level(self, name=None):
158 if name == None: 159 name=self.name 160 return self.log.get_level(name)
161
162 - def has_level(self, level, name=None):
163 if name == None: 164 name=self.name 165 if self.log.get_level(name) <= level: 166 return True 167 else: 168 return False
169
170 - def set_warning_level(self, name=None):
171 if name == None: 172 name=self.name 173 self.log.set_level(name,LOG_WARNING)
174
175 - def set_critical_level(self, name=None):
176 if name == None: 177 name=self.name 178 self.log.set_level(name,LOG_CRITICAL)
179
180 - def set_master_level(self, level=LOG_DEBUG):
181 if isinstance( level, str): 182 try: 183 level=log_levels[level] 184 except: 185 level=LOG_DEBUG 186 self.log.set_master_level(level)
187
188 - def overwrite(self,name,level=None,active=None):
189 if level: 190 self.log.set_level(name,level) 191 if active != None: 192 if active == True: 193 self.log.enable(name) 194 else: 195 self.log.disable(name)
196
197 - def get_feeds(self):
198 return self.log.feeds()
199 200 if __name__ == '__main__': 201 202 from twisted.internet import reactor 203
204 - def test1():
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