source: trunk/python/logging.py @ 1824

Last change on this file since 1824 was 1824, checked in by Malte Marquarding, 14 years ago

Refactoring of init.py. Moved functionality into separate modules. Some minor fixes to make unit test work under 'standard asap'.

File size: 1.8 KB
Line 
1__all__ = ["asaplog", "print_log", "print_log_dec"]
2
3from asap.env import is_casapy
4from asap._asap import LogSink, set_global_sink
5try:
6    from functools import wraps as wraps_dec
7except ImportError:
8    from asap.compatibility import wraps as wraps_dec
9
10
11class _asaplog(object):
12    """Wrapper object to allow for both casapy and asap logging"""
13    def __init__(self):
14        self._enabled = False
15        self._log = ""
16        if is_casapy():
17            from taskinit import casalog
18            self.logger = casalog
19        else:
20            self.logger = LogSink()
21            set_global_sink(self.logger)
22
23    def post(self, level):
24        """Post the messages to the logger. This will clear the buffered
25        logs.
26        """
27        logs = self._log.strip()
28        if len(logs) > 0:
29           self.logger.post(logs, priority=level)
30        if isinstance(self.logger, LogSink):
31            logs = self.logger.pop().strip()
32            if len(logs) > 0:
33                print logs
34        self._log = ""
35
36    def push(self, msg, newline=True):
37        """Push logs into the buffer. post needs to be called to send them."""
38        from asap import rcParams
39        if self._enabled:
40            if rcParams["verbose"]:
41                sep = ""
42                self._log = sep.join([self._log, msg])
43                if newline:
44                    self._log += "\n"
45
46    def enable(self, flag=True):
47        """Enable (or disable) logging."""
48        self._enabled = flag
49
50    def disable(self, flag=False):
51        """Disable (or enable) logging"""
52        self._enabled = flag
53
54asaplog = _asaplog()
55
56def print_log_dec(f, level='INFO'):
57    @wraps_dec(f)
58    def wrap_it(*args, **kw):
59        val = f(*args, **kw)
60        print_log(level)
61        return val
62    return wrap_it
63
64def print_log(level='INFO'):
65    """Alias for asaplog.post."""
66    asaplog.post(level)
Note: See TracBrowser for help on using the repository browser.