better log messages
[dbuscron] / dbuscron / logger.py
index 4a69941..59ddf59 100644 (file)
@@ -8,12 +8,19 @@ class Logger(object):
     __out = None
     __name = None
 
+    __instance = None
+
     DEBUG = 4
     INFO = 3
     WARNING = 2
     ERROR = 1
     PANIC = 0
 
+    def __new__(cls, name, out=sys.stderr):
+        if cls.__instance is None:
+            cls.__instance = super(Logger, cls).__new__(cls)
+        return cls.__instance
+
     def __init__(self, name, out=sys.stderr):
         self.__out = out
         self.__name = name
@@ -24,23 +31,34 @@ class Logger(object):
         self.__level = int(value)
     level = property(_get_level, _set_level)
 
-    def log(self, level, message):
-        if level <= self.__level:
-            ts = datetime.now().strftime('%Y-%m-%d %H:%M')
-            self.__out.write('[%s] %s\n' % (ts, message))
+    def log(self, level, *message):
+        if level > self.__level:
+            return
+
+        def ucode(m):
+            try:
+                return str(m)
+            except UnicodeEncodeError:
+                return unicode(m).encode('utf-8')
 
-    def debug(self, message):
-        self.log(self.DEBUG, message)
+        msg = ' '.join(map(ucode, message))
+        ts = datetime.now().strftime('%Y-%m-%d %H:%M')
+        self.__out.write('[%s] %s\n' % (ts, msg))
+
+    def debug(self, *message):
+        self.log(self.DEBUG, *message)
     
-    def info(self, message):
-        self.log(self.INFO, message)
+    def info(self, *message):
+        self.log(self.INFO, *message)
     
-    def warn(self, message):
-        self.log(self.WARNING, message)
+    def warn(self, *message):
+        self.log(self.WARNING, *message)
+
+    def error(self, *message):
+        self.log(self.ERROR, *message)
 
-    def error(self, message):
-        self.log(self.ERROR, message)
+    def panic(self, *message):
+        self.log(self.PANIC, *message)
 
-    def panic(self, message):
-        self.log(self.PANIC, message)
+    __call__ = info