Changes in trunk/python/logging.py [1833:1939]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/python/logging.py
r1833 r1939 1 __all__ = ["asaplog", "print_log", "print_log_dec"] 1 """This module presents a logging abstraction layer on top of casa. 2 """ 3 __all__ = ["asaplog", "asaplog_post_dec", "AsapLogger"] 2 4 5 import inspect 3 6 from asap.env import is_casapy 4 7 from asap.parameters import rcParams … … 10 13 11 14 12 class _asaplog(object): 13 """Wrapper object to allow for both casapy and asap logging""" 15 class AsapLogger(object): 16 """Wrapper object to allow for both casapy and asap logging. 17 18 Inside casapy this will connect to `taskinit.casalog`. Otherwise it will 19 create its own casa log sink. 20 21 .. note:: Do instantiate a new one - use the :obj:`asaplog` instead. 22 23 """ 14 24 def __init__(self): 15 self._enabled = False25 self._enabled = True 16 26 self._log = "" 17 27 if is_casapy(): … … 22 32 set_global_sink(self.logger) 23 33 24 def post(self, level ):34 def post(self, level='INFO', origin=""): 25 35 """Post the messages to the logger. This will clear the buffered 26 36 logs. 37 38 Parameters: 39 40 level: The log level (severity). One of INFO, WARN, ERROR. 41 27 42 """ 28 43 if not self._enabled: 29 44 return 30 if not rcParams['verbose']:31 return32 45 46 if not origin: 47 origin = inspect.getframeinfo(inspect.currentframe().f_back)[2] 33 48 logs = self._log.strip() 34 49 if len(logs) > 0: 35 self.logger.post(logs, priority=level) 50 if isinstance(self.logger, LogSink): 51 #can't handle unicode in boost signature 52 logs = str(logs) 53 self.logger.post(logs, priority=level, origin=origin) 36 54 if isinstance(self.logger, LogSink): 37 55 logs = self.logger.pop().strip() … … 41 59 42 60 def push(self, msg, newline=True): 43 """Push logs into the buffer. post needs to be called to send them.""" 44 from asap import rcParams 61 """Push logs into the buffer. post needs to be called to send them. 62 63 Parameters: 64 65 msg: the log message (string) 66 67 newline: should we terminate with a newline (default yes) 68 69 """ 45 70 if self._enabled: 46 if rcParams["verbose"]: 47 sep = "" 48 self._log = sep.join([self._log, msg]) 49 if newline: 50 self._log += "\n" 71 sep = "" 72 self._log = sep.join([self._log, msg]) 73 if newline: 74 self._log += "\n" 51 75 52 76 def enable(self, flag=True): … … 58 82 self._enabled = flag 59 83 60 asaplog = _asaplog() 84 def is_enabled(self): 85 return self._enabled 61 86 62 def print_log_dec(f, level='INFO'): 87 asaplog = AsapLogger() 88 """Default asap logger""" 89 90 def asaplog_post_dec(f): 91 """Decorator which posts log at completion of the wrapped method. 92 93 Example:: 94 95 @asaplog_post_dec 96 def test(self): 97 do_stuff() 98 asaplog.push('testing...', False) 99 do_more_stuff() 100 asaplog.push('finished') 101 """ 63 102 @wraps_dec(f) 64 103 def wrap_it(*args, **kw): 65 val = f(*args, **kw) 66 print_log(level) 67 return val 104 level = "INFO" 105 try: 106 val = f(*args, **kw) 107 return val 108 except Exception, ex: 109 level = "ERROR" 110 asaplog.push(str(ex)) 111 if rcParams['verbose']: 112 pass 113 else: 114 raise 115 finally: 116 asaplog.post(level, f.func_name) 117 #asaplog.post(level, ".".join([f.__module__,f.func_name])) 68 118 return wrap_it 69 119 70 def print_log(level='INFO'):71 """Alias for asaplog.post."""72 asaplog.post(level)
Note:
See TracChangeset
for help on using the changeset viewer.