Changes in trunk/python/logging.py [1939:1833]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/python/logging.py
r1939 r1833 1 """This module presents a logging abstraction layer on top of casa. 2 """ 3 __all__ = ["asaplog", "asaplog_post_dec", "AsapLogger"] 1 __all__ = ["asaplog", "print_log", "print_log_dec"] 4 2 5 import inspect6 3 from asap.env import is_casapy 7 4 from asap.parameters import rcParams … … 13 10 14 11 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 """ 12 class _asaplog(object): 13 """Wrapper object to allow for both casapy and asap logging""" 24 14 def __init__(self): 25 self._enabled = True15 self._enabled = False 26 16 self._log = "" 27 17 if is_casapy(): … … 32 22 set_global_sink(self.logger) 33 23 34 def post(self, level ='INFO', origin=""):24 def post(self, level): 35 25 """Post the messages to the logger. This will clear the buffered 36 26 logs. 37 38 Parameters:39 40 level: The log level (severity). One of INFO, WARN, ERROR.41 42 27 """ 43 28 if not self._enabled: 44 29 return 30 if not rcParams['verbose']: 31 return 45 32 46 if not origin:47 origin = inspect.getframeinfo(inspect.currentframe().f_back)[2]48 33 logs = self._log.strip() 49 34 if len(logs) > 0: 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) 35 self.logger.post(logs, priority=level) 54 36 if isinstance(self.logger, LogSink): 55 37 logs = self.logger.pop().strip() … … 59 41 60 42 def push(self, msg, newline=True): 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 """ 43 """Push logs into the buffer. post needs to be called to send them.""" 44 from asap import rcParams 70 45 if self._enabled: 71 sep = "" 72 self._log = sep.join([self._log, msg]) 73 if newline: 74 self._log += "\n" 46 if rcParams["verbose"]: 47 sep = "" 48 self._log = sep.join([self._log, msg]) 49 if newline: 50 self._log += "\n" 75 51 76 52 def enable(self, flag=True): … … 82 58 self._enabled = flag 83 59 84 def is_enabled(self): 85 return self._enabled 60 asaplog = _asaplog() 86 61 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 """ 62 def print_log_dec(f, level='INFO'): 102 63 @wraps_dec(f) 103 64 def wrap_it(*args, **kw): 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])) 65 val = f(*args, **kw) 66 print_log(level) 67 return val 118 68 return wrap_it 119 69 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.