Logger has __call__ == info and accepts multiple values to log
[dbuscron] / dbuscron / logger.py
1
2 import sys
3 from datetime import datetime
4
5 class Logger(object):
6
7     __level = 1
8     __out = None
9     __name = None
10
11     __instance = None
12
13     DEBUG = 4
14     INFO = 3
15     WARNING = 2
16     ERROR = 1
17     PANIC = 0
18
19     def __new__(cls, name, out=sys.stderr):
20         if cls.__instance is None:
21             cls.__instance = super(Logger, cls).__new__(cls)
22         return cls.__instance
23
24     def __init__(self, name, out=sys.stderr):
25         self.__out = out
26         self.__name = name
27
28     def _get_level(self):
29         return self.__level
30     def _set_level(self, value):
31         self.__level = int(value)
32     level = property(_get_level, _set_level)
33
34     def log(self, level, *message):
35         if level <= self.__level:
36             msg = ' '.join(str(m) for m in message)
37             ts = datetime.now().strftime('%Y-%m-%d %H:%M')
38             self.__out.write('[%s] %s\n' % (ts, msg))
39
40     def debug(self, *message):
41         self.log(self.DEBUG, *message)
42     
43     def info(self, *message):
44         self.log(self.INFO, *message)
45     
46     def warn(self, *message):
47         self.log(self.WARNING, *message)
48
49     def error(self, *message):
50         self.log(self.ERROR, *message)
51
52     def panic(self, *message):
53         self.log(self.PANIC, *message)
54
55     __call__ = info
56