source: trunk/python/logging.py@ 1858

Last change on this file since 1858 was 1858, checked in by Malte Marquarding, 15 years ago

Adde more API documentation

File size: 2.8 KB
Line 
1"""This module presents a logging abstraction layer on top of casa.
2"""
3__all__ = ["asaplog", "print_log", "print_log_dec", "AsapLogger"]
4
5from asap.env import is_casapy
6from asap.parameters import rcParams
7from asap._asap import LogSink, set_global_sink
8try:
9 from functools import wraps as wraps_dec
10except ImportError:
11 from asap.compatibility import wraps as wraps_dec
12
13
14class AsapLogger(object):
15 """Wrapper object to allow for both casapy and asap logging.
16
17 Inside casapy this will connect to `taskinit.casalog`. Otherwise it will
18 create its own casa log sink.
19
20 .. note:: Do instantiate a new one - use the :obj:`asaplog` instead.
21
22 """
23 def __init__(self):
24 self._enabled = False
25 self._log = ""
26 if is_casapy():
27 from taskinit import casalog
28 self.logger = casalog
29 else:
30 self.logger = LogSink()
31 set_global_sink(self.logger)
32
33 def post(self, level):
34 """Post the messages to the logger. This will clear the buffered
35 logs.
36
37 Parameters:
38
39 level: The log level (severity). One of INFO, WARN, ERROR.
40
41 """
42 if not self._enabled:
43 return
44 if not rcParams['verbose']:
45 return
46
47 logs = self._log.strip()
48 if len(logs) > 0:
49 self.logger.post(logs, priority=level)
50 if isinstance(self.logger, LogSink):
51 logs = self.logger.pop().strip()
52 if len(logs) > 0:
53 print logs
54 self._log = ""
55
56 def push(self, msg, newline=True):
57 """Push logs into the buffer. post needs to be called to send them.
58
59 Parameters:
60
61 msg: the log message (string)
62
63 newline: should we terminate with a newline (default yes)
64
65 """
66 from asap import rcParams
67 if self._enabled:
68 if rcParams["verbose"]:
69 sep = ""
70 self._log = sep.join([self._log, msg])
71 if newline:
72 self._log += "\n"
73
74 def enable(self, flag=True):
75 """Enable (or disable) logging."""
76 self._enabled = flag
77
78 def disable(self, flag=False):
79 """Disable (or enable) logging"""
80 self._enabled = flag
81
82asaplog = AsapLogger()
83"""Default asap logger"""
84
85def print_log_dec(f, level='INFO'):
86 """Decorator which posts log at completion of the wrapped method.
87 Example::
88
89 @print_log_dec
90 def test(self):
91 do_stuff()
92 asaplog.push('testing...', False)
93 do_more_stuff()
94 asaplog.push('finished')
95 """
96 @wraps_dec(f)
97 def wrap_it(*args, **kw):
98 val = f(*args, **kw)
99 print_log(level)
100 return val
101 return wrap_it
102
103def print_log(level='INFO'):
104 """Alias for asaplog.post(level)"""
105 asaplog.post(level)
Note: See TracBrowser for help on using the repository browser.